Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
S
srvpro
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
1
Issues
1
List
Boards
Labels
Service Desk
Milestones
Merge Requests
3
Merge Requests
3
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
srvpro
Commits
c7ffc71f
Commit
c7ffc71f
authored
9 years ago
by
mercury233
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
revert
parent
2a6e56ee
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
88 additions
and
97 deletions
+88
-97
room.coffee
room.coffee
+4
-2
room.js
room.js
+23
-26
ygopro-server.coffee
ygopro-server.coffee
+9
-8
ygopro-server.js
ygopro-server.js
+52
-61
No files found.
room.coffee
View file @
c7ffc71f
...
...
@@ -6,7 +6,7 @@ spawnSync = require('child_process').spawnSync
ygopro
=
require
'./ygopro.js'
bunyan
=
require
'bunyan'
moment
=
require
'moment'
redis
=
require
'redis'
#
redis = require 'redis'
moment
.
locale
(
'zh-cn'
,
{
relativeTime
:
{
future
:
'%s内'
,
past
:
'%s前'
,
...
...
@@ -25,7 +25,7 @@ moment.locale('zh-cn', { relativeTime : {
settings
=
require
'./config.json'
log
=
bunyan
.
createLogger
name
:
"mycard-room"
redisdb
=
redis
.
createClient
host
:
"127.0.0.1"
,
port
:
settings
.
modules
.
redis_port
#
redisdb = redis.createClient host: "127.0.0.1", port: settings.modules.redis_port
#获取可用内存
get_memory_usage
=
()
->
...
...
@@ -323,6 +323,7 @@ class Room
#积分
return
if
@
deleted
#log.info 'room-delete', this.name, Room.all.length
###
if @player_datas.length
replay_buffer = Buffer.concat(@watcher_buffers).toString('binary')
player_names=@player_datas[0].name + (if @player_datas[2] then "+" + @player_datas[2].name else "") +
...
...
@@ -341,6 +342,7 @@ class Room
recorded_ip.push player.ip
redisdb.lpush(player.ip+":replays", replay_id)
return
###
@
watcher_buffers
=
[]
@
players
=
[]
@
watcher
.
end
()
if
@
watcher
...
...
This diff is collapsed.
Click to expand it.
room.js
View file @
c7ffc71f
// Generated by CoffeeScript 1.10.0
(
function
()
{
var
Room
,
_
,
bunyan
,
get_memory_usage
,
log
,
moment
,
redis
,
redisdb
,
settings
,
spawn
,
spawnSync
,
ygopro
;
var
Room
,
_
,
bunyan
,
get_memory_usage
,
log
,
moment
,
settings
,
spawn
,
spawnSync
,
ygopro
;
_
=
require
(
'
underscore
'
);
...
...
@@ -18,8 +18,6 @@
moment
=
require
(
'
moment
'
);
redis
=
require
(
'
redis
'
);
moment
.
locale
(
'
zh-cn
'
,
{
relativeTime
:
{
future
:
'
%s内
'
,
...
...
@@ -44,11 +42,6 @@
name
:
"
mycard-room
"
});
redisdb
=
redis
.
createClient
({
host
:
"
127.0.0.1
"
,
port
:
settings
.
modules
.
redis_port
});
get_memory_usage
=
function
()
{
var
actualFree
,
buffers
,
cached
,
free
,
line
,
lines
,
percentUsed
,
prc_free
,
total
;
prc_free
=
spawnSync
(
"
free
"
,
[]);
...
...
@@ -419,27 +412,31 @@
}
Room
.
prototype
[
"
delete
"
]
=
function
()
{
var
date_time
,
index
,
player_names
,
recorded_ip
,
replay_buffer
,
replay_id
;
var
index
;
if
(
this
.
deleted
)
{
return
;
}
if
(
this
.
player_datas
.
length
)
{
replay_buffer
=
Buffer
.
concat
(
this
.
watcher_buffers
).
toString
(
'
binary
'
);
player_names
=
this
.
player_datas
[
0
].
name
+
(
this
.
player_datas
[
2
]
?
"
+
"
+
this
.
player_datas
[
2
].
name
:
""
)
+
"
VS
"
+
this
.
player_datas
[
1
].
name
+
(
this
.
player_datas
[
3
]
?
"
+
"
+
this
.
player_datas
[
3
].
name
:
""
);
date_time
=
moment
().
format
(
'
YYYY-MM-DD HH:mm:ss
'
);
replay_id
=
Math
.
floor
(
Math
.
random
()
*
100000000
);
redisdb
.
hmset
(
"
replay:
"
+
replay_id
,
"
replay_id
"
,
replay_id
,
"
replay_buffer
"
,
replay_buffer
,
"
player_names
"
,
player_names
,
"
date_time
"
,
date_time
);
recorded_ip
=
[];
_
.
each
(
this
.
player_datas
,
(
function
(
_this
)
{
return
function
(
player
)
{
if
(
_
.
contains
(
recorded_ip
,
player
.
ip
))
{
return
;
}
recorded_ip
.
push
(
player
.
ip
);
redisdb
.
lpush
(
player
.
ip
+
"
:replays
"
,
replay_id
);
};
})(
this
));
}
/*
if @player_datas.length
replay_buffer = Buffer.concat(@watcher_buffers).toString('binary')
player_names=@player_datas[0].name + (if @player_datas[2] then "+" + @player_datas[2].name else "") +
" VS " +
@player_datas[1].name + (if @player_datas[3] then "+" + @player_datas[3].name else "")
date_time=moment().format('YYYY-MM-DD HH:mm:ss')
replay_id=Math.floor(Math.random()*100000000)
redisdb.hmset("replay:"+replay_id,
"replay_id", replay_id,
"replay_buffer", replay_buffer,
"player_names", player_names,
"date_time", date_time)
recorded_ip=[]
_.each @player_datas, (player)=>
return if _.contains(recorded_ip, player.ip)
recorded_ip.push player.ip
redisdb.lpush(player.ip+":replays", replay_id)
return
*/
this
.
watcher_buffers
=
[];
this
.
players
=
[];
if
(
this
.
watcher
)
{
...
...
This diff is collapsed.
Click to expand it.
ygopro-server.coffee
View file @
c7ffc71f
...
...
@@ -18,8 +18,8 @@ bunyan = require 'bunyan'
moment
=
require
'moment'
redis
=
require
'redis'
redisdb
=
redis
.
createClient
host
:
"127.0.0.1"
,
port
:
settings
.
modules
.
redis_port
#
redis = require 'redis'
#
redisdb = redis.createClient host: "127.0.0.1", port: settings.modules.redis_port
#heapdump = require 'heapdump'
...
...
@@ -110,7 +110,7 @@ net.createServer (client) ->
ygopro
.
stoc_send_chat
(
client
,
"服务器错误:
#{
error
}
"
,
11
)
client
.
end
()
return
###
client.open_cloud_replay= (err, replay)->
if err or !replay
ygopro.stoc_send_chat(client,"没有找到录像", 11)
...
...
@@ -125,7 +125,7 @@ net.createServer (client) ->
client.write replay_buffer
client.end()
return
###
#需要重构
#客户端到服务端(ctos)协议分析
ctos_buffer
=
new
Buffer
(
0
)
...
...
@@ -264,7 +264,8 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
code
:
2
}
client
.
end
()
###
else if info.pass.toUpperCase()=="R"
ygopro.stoc_send_chat(client,"以下是您近期的云录像,密码处输入 R#录像编号 即可观看", 14)
redisdb.lrange client.remoteAddress+":replays", 0, 2, (err, result)=>
...
...
@@ -281,7 +282,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
code: 2
}
client.end()), 500
else if info.pass[0...2].toUpperCase()=="R#"
replay_id=info.pass.split("#")[1]
if (replay_id>0 and replay_id<=3)
...
...
@@ -297,8 +298,8 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
code: 2
}
client.end()
###
else
if
info
.
version
!=
settings
.
version
ygopro
.
stoc_send_chat
(
client
,
settings
.
modules
.
update
,
11
)
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,{
...
...
This diff is collapsed.
Click to expand it.
ygopro-server.js
View file @
c7ffc71f
// Generated by CoffeeScript 1.10.0
(
function
()
{
var
Graveyard
,
Room
,
_
,
bunyan
,
debug
,
dialogues
,
execFile
,
fs
,
http
,
http_server
,
log
,
moment
,
net
,
os
,
path
,
re
dis
,
redisdb
,
re
quest
,
settings
,
tips
,
tribute
,
url
,
wait_room_start
,
ygopro
;
var
Graveyard
,
Room
,
_
,
bunyan
,
debug
,
dialogues
,
execFile
,
fs
,
http
,
http_server
,
log
,
moment
,
net
,
os
,
path
,
request
,
settings
,
tips
,
tribute
,
url
,
wait_room_start
,
ygopro
;
net
=
require
(
'
net
'
);
...
...
@@ -28,13 +28,6 @@
moment
=
require
(
'
moment
'
);
redis
=
require
(
'
redis
'
);
redisdb
=
redis
.
createClient
({
host
:
"
127.0.0.1
"
,
port
:
settings
.
modules
.
redis_port
});
settings
=
require
(
'
./config.json
'
);
settings
.
BANNED_user
=
[];
...
...
@@ -138,22 +131,23 @@
client
.
end
();
}
});
client
.
open_cloud_replay
=
function
(
err
,
replay
)
{
var
replay_buffer
;
if
(
err
||
!
replay
)
{
ygopro
.
stoc_send_chat
(
client
,
"
没有找到录像
"
,
11
);
ygopro
.
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
msg
:
1
,
/*
client.open_cloud_replay= (err, replay)->
if err or !replay
ygopro.stoc_send_chat(client,"没有找到录像", 11)
ygopro.stoc_send client, 'ERROR_MSG',{
msg: 1
code: 2
}
);
client
.
end
()
;
return
;
}
replay_buffer
=
new
Buffer
(
replay
.
replay_buffer
,
'
binary
'
);
ygopro
.
stoc_send_chat
(
client
,
"
正在观看云录像:R#
"
+
replay
.
replay_id
+
"
"
+
replay
.
player_names
+
"
"
+
replay
.
date_time
,
14
);
client
.
write
(
replay_buffer
);
client
.
end
();
};
}
client.end()
return
replay_buffer=new Buffer(replay.replay_buffer,'binary')
ygopro.stoc_send_chat(client,"正在观看云录像:R##{replay.replay_id} #{replay.player_names} #{replay.date_time}", 14)
client.write replay_buffer
client.
end()
return
*/
ctos_buffer
=
new
Buffer
(
0
);
ctos_message_length
=
0
;
ctos_proto
=
0
;
...
...
@@ -289,7 +283,7 @@
});
ygopro
.
ctos_follow
(
'
JOIN_GAME
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
var
k
,
len
,
ref
,
r
eplay_id
,
r
oom
;
var
k
,
len
,
ref
,
room
;
if
(
settings
.
modules
.
stop
)
{
ygopro
.
stoc_send_chat
(
client
,
settings
.
modules
.
stop
,
11
);
ygopro
.
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
...
...
@@ -297,44 +291,41 @@
code
:
2
});
client
.
end
();
}
else
if
(
info
.
pass
.
toUpperCase
()
===
"
R
"
)
{
ygopro
.
stoc_send_chat
(
client
,
"
以下是您近期的云录像,密码处输入 R#录像编号 即可观看
"
,
14
);
redisdb
.
lrange
(
client
.
remoteAddress
+
"
:replays
"
,
0
,
2
,
(
function
(
_this
)
{
return
function
(
err
,
result
)
{
_
.
each
(
result
,
function
(
replay_id
,
id
)
{
redisdb
.
hgetall
(
"
replay:
"
+
replay_id
,
function
(
err
,
replay
)
{
ygopro
.
stoc_send_chat
(
client
,
"
<
"
+
(
id
-
0
+
1
)
+
"
> R#
"
+
replay_id
+
"
"
+
replay
.
player_names
+
"
"
+
replay
.
date_time
,
14
);
});
});
};
})(
this
));
setTimeout
(((
function
(
_this
)
{
return
function
()
{
ygopro
.
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
msg
:
1
,
code
:
2
});
return
client
.
end
();
};
})(
this
)),
500
);
}
else
if
(
info
.
pass
.
slice
(
0
,
2
).
toUpperCase
()
===
"
R#
"
)
{
replay_id
=
info
.
pass
.
split
(
"
#
"
)[
1
];
if
(
replay_id
>
0
&&
replay_id
<=
3
)
{
redisdb
.
lindex
(
client
.
remoteAddress
+
"
:replays
"
,
replay_id
-
1
,
(
function
(
_this
)
{
return
function
(
err
,
replay_id
)
{
redisdb
.
hgetall
(
"
replay:
"
+
replay_id
,
client
.
open_cloud_replay
);
};
})(
this
));
}
else
if
(
replay_id
)
{
redisdb
.
hgetall
(
"
replay:
"
+
replay_id
,
client
.
open_cloud_replay
);
}
else
{
ygopro
.
stoc_send_chat
(
client
,
"
没有找到录像
"
,
11
);
ygopro
.
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
msg
:
1
,
/*
else if info.pass.toUpperCase()=="R"
ygopro.stoc_send_chat(client,"以下是您近期的云录像,密码处输入 R#录像编号 即可观看", 14)
redisdb.lrange client.remoteAddress+":replays", 0, 2, (err, result)=>
_.each result, (replay_id,id)=>
redisdb.hgetall "replay:"+replay_id, (err, replay)=>
ygopro.stoc_send_chat(client,"<#{id-0+1}> R##{replay_id} #{replay.player_names} #{replay.date_time}", 14)
return
return
return
#强行等待异步执行完毕_(:з」∠)_
setTimeout (()=>
ygopro.stoc_send client, 'ERROR_MSG',{
msg: 1
code: 2
});
client
.
end
();
}
}
client.end()), 500
else if info.pass[0...2].toUpperCase()=="R#"
replay_id=info.pass.split("#")[1]
if (replay_id>0 and replay_id<=3)
redisdb.lindex client.remoteAddress+":replays", replay_id-1, (err, replay_id)=>
redisdb.hgetall "replay:"+replay_id, client.open_cloud_replay
return
else if replay_id
redisdb.hgetall "replay:"+replay_id, client.open_cloud_replay
else
ygopro.stoc_send_chat(client,"没有找到录像", 11)
ygopro.stoc_send client, 'ERROR_MSG',{
msg: 1
code: 2
}
client.end()
*/
}
else
if
(
info
.
version
!==
settings
.
version
)
{
ygopro
.
stoc_send_chat
(
client
,
settings
.
modules
.
update
,
11
);
ygopro
.
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment