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
ce5b7b96
Commit
ce5b7b96
authored
Aug 19, 2016
by
mercury233
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update socket connections
parent
ab79baf5
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
121 additions
and
122 deletions
+121
-122
ygopro-server.coffee
ygopro-server.coffee
+60
-57
ygopro-server.js
ygopro-server.js
+59
-63
ygopro.coffee
ygopro.coffee
+1
-1
ygopro.js
ygopro.js
+1
-1
No files found.
ygopro-server.coffee
View file @
ce5b7b96
...
...
@@ -73,9 +73,9 @@ ban_user = (name) ->
for
room
in
ROOM_all
when
room
and
room
.
established
for
player
in
room
.
players
if
player
and
player
.
name
==
name
settings
.
ban
.
banned_ip
.
push
(
player
.
remoteAddress
)
settings
.
ban
.
banned_ip
.
push
(
player
.
ip
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
player
.
name
}
被系统请出了房间"
,
ygopro
.
constants
.
COLORS
.
RED
)
player
.
end
()
player
.
destroy
()
continue
return
...
...
@@ -198,7 +198,7 @@ ROOM_find_or_create_random = (type, player_ip)->
return
room
and
room
.
random_type
!=
''
and
!
room
.
started
and
((
type
==
''
and
room
.
random_type
!=
'T'
)
or
room
.
random_type
==
type
)
and
room
.
get_playing_player
().
length
<
max_player
and
(
room
.
get_host
()
==
null
or
room
.
get_host
().
remoteAddress
!=
ROOM_players_oppentlist
[
player_ip
])
and
(
room
.
get_host
()
==
null
or
room
.
get_host
().
ip
!=
ROOM_players_oppentlist
[
player_ip
])
and
(
playerbanned
==
room
.
deprecated
)
if
result
result
.
welcome
=
'对手已经在等你了,开始决斗吧!'
...
...
@@ -506,7 +506,7 @@ class Room
@
watcher_buffers
=
[]
@
recorder_buffers
=
[]
@
players
=
[]
@
watcher
.
end
()
if
@
watcher
@
watcher
.
destroy
()
if
@
watcher
@
deleted
=
true
index
=
_
.
indexOf
(
ROOM_all
,
this
)
ROOM_all
[
index
]
=
null
unless
index
==
-
1
...
...
@@ -543,24 +543,16 @@ class Room
connect
:
(
client
)
->
@
players
.
push
client
client
.
ip
=
client
.
remoteAddress
connect_count
=
0
if
client
.
remoteAddress
!=
'::ffff:127.0.0.1'
if
connect_count
=
ROOM_connected_ip
[
client
.
remoteAddress
]
connect_count
++
else
connect_count
=
1
ROOM_connected_ip
[
client
.
remoteAddress
]
=
connect_count
if
@
random_type
client
.
abuse_count
=
0
host_player
=
@
get_host
()
if
host_player
&&
(
host_player
!=
client
)
# 进来时已经有人在等待了,互相记录为匹配过
ROOM_players_oppentlist
[
host_player
.
remoteAddress
]
=
client
.
remoteAddress
ROOM_players_oppentlist
[
client
.
remoteAddress
]
=
host_player
.
remoteAddress
ROOM_players_oppentlist
[
host_player
.
ip
]
=
client
.
ip
ROOM_players_oppentlist
[
client
.
ip
]
=
host_player
.
ip
else
# 第一个玩家刚进来,还没就位
ROOM_players_oppentlist
[
client
.
remoteAddress
]
=
null
ROOM_players_oppentlist
[
client
.
ip
]
=
null
if
@
established
roomlist
.
update
(
this
)
if
!
@
private
and
!
@
started
and
settings
.
modules
.
enable_websocket_roomlist
...
...
@@ -596,6 +588,13 @@ class Room
# 网络连接
net
.
createServer
(
client
)
->
client
.
ip
=
client
.
remoteAddress
connect_count
=
ROOM_connected_ip
[
client
.
ip
]
or
0
if
client
.
ip
!=
'::ffff:127.0.0.1'
connect_count
++
ROOM_connected_ip
[
client
.
ip
]
=
connect_count
#log.info "connect", client.ip, ROOM_connected_ip[client.ip]
# server stand for the connection to ygopro server process
server
=
new
net
.
Socket
()
client
.
server
=
server
...
...
@@ -610,11 +609,12 @@ net.createServer (client) ->
if
connect_count
>
0
connect_count
--
ROOM_connected_ip
[
client
.
ip
]
=
connect_count
#log.info "disconnect", client.ip, ROOM_connected_ip[client.ip]
tribute
(
client
)
unless
client
.
closed
client
.
closed
=
true
room
.
disconnect
(
client
)
if
room
server
.
end
()
server
.
destroy
()
return
client
.
on
'error'
,
(
error
)
->
...
...
@@ -624,42 +624,45 @@ net.createServer (client) ->
if
connect_count
>
0
connect_count
--
ROOM_connected_ip
[
client
.
ip
]
=
connect_count
#log.info "err disconnect", client.ip, ROOM_connected_ip[client.ip]
tribute
(
client
)
unless
client
.
closed
client
.
closed
=
error
room
.
disconnect
(
client
,
error
)
if
room
server
.
end
()
server
.
destroy
()
return
client
.
on
'timeout'
,
()
->
server
.
end
()
server
.
destroy
()
return
server
.
on
'close'
,
(
had_error
)
->
#log.info "server closed", client.name, had_error
room
=
ROOM_all
[
client
.
rid
]
#log.info "server close", client.ip, ROOM_connected_ip[client.ip]
tribute
(
server
)
room
.
disconnector
=
'server'
if
room
server
.
closed
=
true
unless
server
.
closed
unless
client
.
closed
ygopro
.
stoc_send_chat
(
client
,
"服务器关闭了连接"
,
ygopro
.
constants
.
COLORS
.
RED
)
client
.
end
()
client
.
destroy
()
return
server
.
on
'error'
,
(
error
)
->
#log.info "server error", client.name, error
room
=
ROOM_all
[
client
.
rid
]
#log.info "server err close", client.ip, ROOM_connected_ip[client.ip]
tribute
(
server
)
room
.
disconnector
=
'server'
if
room
server
.
closed
=
error
unless
client
.
closed
ygopro
.
stoc_send_chat
(
client
,
"服务器错误:
#{
error
}
"
,
ygopro
.
constants
.
COLORS
.
RED
)
client
.
end
()
client
.
destroy
()
return
if
ROOM_bad_ip
[
client
.
remoteAddress
]
>
5
log
.
info
'BAD IP'
,
client
.
remoteAddress
client
.
end
()
if
ROOM_bad_ip
[
client
.
ip
]
>
5
log
.
info
'BAD IP'
,
client
.
ip
client
.
destroy
()
return
if
settings
.
modules
.
enable_cloud_replay
...
...
@@ -673,11 +676,11 @@ net.createServer (client) ->
if
err
log
.
info
"cloud replay unzip error: "
+
err
ygopro
.
stoc_send_chat
(
client
,
"播放录像出错"
,
ygopro
.
constants
.
COLORS
.
RED
)
client
.
end
()
client
.
destroy
()
return
ygopro
.
stoc_send_chat
(
client
,
"正在观看云录像:R#
#{
replay
.
replay_id
}
#{
replay
.
player_names
}
#{
replay
.
date_time
}
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
client
.
write
replay_buffer
client
.
end
()
client
.
destroy
()
return
return
...
...
@@ -734,14 +737,14 @@ net.createServer (client) ->
looplimit
++
#log.info(looplimit)
if
looplimit
>
800
or
ROOM_bad_ip
[
client
.
remoteAddress
]
>
5
log
.
info
(
"error ctos"
,
client
.
name
,
client
.
remoteAddress
)
bad_ip_count
=
ROOM_bad_ip
[
client
.
remoteAddress
]
if
looplimit
>
800
or
ROOM_bad_ip
[
client
.
ip
]
>
5
log
.
info
(
"error ctos"
,
client
.
name
,
client
.
ip
)
bad_ip_count
=
ROOM_bad_ip
[
client
.
ip
]
if
bad_ip_count
ROOM_bad_ip
[
client
.
remoteAddress
]
=
bad_ip_count
+
1
ROOM_bad_ip
[
client
.
ip
]
=
bad_ip_count
+
1
else
ROOM_bad_ip
[
client
.
remoteAddress
]
=
1
client
.
end
()
ROOM_bad_ip
[
client
.
ip
]
=
1
client
.
destroy
()
break
if
client
.
established
...
...
@@ -804,7 +807,7 @@ net.createServer (client) ->
#log.info(looplimit)
if
looplimit
>
800
log
.
info
(
"error stoc"
,
client
.
name
)
server
.
end
()
server
.
destroy
()
break
client
.
write
buffer
for
buffer
in
datas
...
...
@@ -835,7 +838,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
else
if
info
.
pass
.
toUpperCase
()
==
"R"
and
settings
.
modules
.
enable_cloud_replay
ygopro
.
stoc_send_chat
(
client
,
"以下是您近期的云录像,密码处输入 R#录像编号 即可观看"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
redisdb
.
lrange
client
.
remoteAddress
+
":replays"
,
0
,
2
,
(
err
,
result
)
->
redisdb
.
lrange
client
.
ip
+
":replays"
,
0
,
2
,
(
err
,
result
)
->
_
.
each
result
,
(
replay_id
,
id
)
->
redisdb
.
hgetall
"replay:"
+
replay_id
,
(
err
,
replay
)
->
if
err
or
!
replay
...
...
@@ -851,13 +854,13 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
msg
:
1
code
:
2
}
client
.
end
()
client
.
destroy
()
return
),
500
else
if
info
.
pass
[
0
...
2
].
toUpperCase
()
==
"R#"
and
settings
.
modules
.
enable_cloud_replay
replay_id
=
info
.
pass
.
split
(
"#"
)[
1
]
if
(
replay_id
>
0
and
replay_id
<=
9
)
redisdb
.
lindex
client
.
remoteAddress
+
":replays"
,
replay_id
-
1
,
(
err
,
replay_id
)
->
redisdb
.
lindex
client
.
ip
+
":replays"
,
replay_id
-
1
,
(
err
,
replay_id
)
->
if
err
or
!
replay_id
log
.
info
"cloud replay replayid error: "
+
err
if
err
ygopro
.
stoc_die
(
client
,
"没有找到录像"
)
...
...
@@ -879,7 +882,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
msg
:
4
code
:
settings
.
version
}
client
.
end
()
client
.
destroy
()
else
if
!
info
.
pass
.
length
and
!
settings
.
modules
.
enable_random_duel
and
!
settings
.
modules
.
enable_windbot
ygopro
.
stoc_die
(
client
,
"房间名为空,请填写主机密码"
)
...
...
@@ -998,38 +1001,38 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
else
if
!
client
.
name
or
client
.
name
==
""
ygopro
.
stoc_die
(
client
,
"请输入正确的用户名"
)
else
if
ROOM_connected_ip
[
client
.
remoteAddress
]
>
10
log
.
warn
(
"MULTI LOGIN"
,
client
.
name
,
client
.
remoteAddress
)
ygopro
.
stoc_die
(
client
,
"同时开启的客户端数量过多 "
+
client
.
remoteAddress
)
else
if
ROOM_connected_ip
[
client
.
ip
]
>
5
log
.
warn
(
"MULTI LOGIN"
,
client
.
name
,
client
.
ip
)
ygopro
.
stoc_die
(
client
,
"同时开启的客户端数量过多 "
+
client
.
ip
)
else
if
_
.
indexOf
(
settings
.
ban
.
banned_user
,
client
.
name
)
>
-
1
#账号被封
settings
.
ban
.
banned_ip
.
push
(
client
.
remoteAddress
)
log
.
warn
(
"BANNED USER LOGIN"
,
client
.
name
,
client
.
remoteAddress
)
settings
.
ban
.
banned_ip
.
push
(
client
.
ip
)
log
.
warn
(
"BANNED USER LOGIN"
,
client
.
name
,
client
.
ip
)
ygopro
.
stoc_die
(
client
,
"您的账号已被封禁"
)
else
if
_
.
indexOf
(
settings
.
ban
.
banned_ip
,
client
.
remoteAddress
)
>
-
1
#IP被封
log
.
warn
(
"BANNED IP LOGIN"
,
client
.
name
,
client
.
remoteAddress
)
else
if
_
.
indexOf
(
settings
.
ban
.
banned_ip
,
client
.
ip
)
>
-
1
#IP被封
log
.
warn
(
"BANNED IP LOGIN"
,
client
.
name
,
client
.
ip
)
ygopro
.
stoc_die
(
client
,
"您的账号已被封禁"
)
else
if
_
.
any
(
settings
.
ban
.
badword_level3
,
(
badword
)
->
regexp
=
new
RegExp
(
badword
,
'i'
)
return
name
.
match
(
regexp
)
,
name
=
client
.
name
)
log
.
warn
(
"BAD NAME LEVEL 3"
,
client
.
name
,
client
.
remoteAddress
)
log
.
warn
(
"BAD NAME LEVEL 3"
,
client
.
name
,
client
.
ip
)
ygopro
.
stoc_die
(
client
,
"您的用户名存在不适当的内容"
)
else
if
_
.
any
(
settings
.
ban
.
badword_level2
,
(
badword
)
->
regexp
=
new
RegExp
(
badword
,
'i'
)
return
name
.
match
(
regexp
)
,
name
=
client
.
name
)
log
.
warn
(
"BAD NAME LEVEL 2"
,
client
.
name
,
client
.
remoteAddress
)
log
.
warn
(
"BAD NAME LEVEL 2"
,
client
.
name
,
client
.
ip
)
ygopro
.
stoc_die
(
client
,
"您的用户名存在不适当的内容"
)
else
if
_
.
any
(
settings
.
ban
.
badword_level1
,
(
badword
)
->
regexp
=
new
RegExp
(
badword
,
'i'
)
return
name
.
match
(
regexp
)
,
name
=
client
.
name
)
log
.
warn
(
"BAD NAME LEVEL 1"
,
client
.
name
,
client
.
remoteAddress
)
log
.
warn
(
"BAD NAME LEVEL 1"
,
client
.
name
,
client
.
ip
)
ygopro
.
stoc_die
(
client
,
"您的用户名存在不适当的内容,请注意更改"
)
else
if
info
.
pass
.
length
&&
!
ROOM_validate
(
info
.
pass
)
...
...
@@ -1045,7 +1048,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
ygopro
.
stoc_send_chat
(
client
,
"您的版本号过低,可能出现未知问题,电脑用户请升级版本,YGOMobile用户请等待作者更新"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
)
#log.info 'join_game',info.pass, client.name
room
=
ROOM_find_or_create_by_name
(
info
.
pass
,
client
.
remoteAddress
)
room
=
ROOM_find_or_create_by_name
(
info
.
pass
,
client
.
ip
)
if
!
room
ygopro
.
stoc_die
(
client
,
"服务器已经爆满,请稍候再试"
)
else
if
room
.
error
...
...
@@ -1221,7 +1224,7 @@ ygopro.ctos_follow 'HS_KICK', true, (buffer, info, client, server)->
if
client
.
kick_count
>=
5
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
被系统请出了房间"
,
ygopro
.
constants
.
COLORS
.
RED
)
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"挂房间"
)
client
.
end
()
client
.
destroy
()
return
true
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
player
.
name
}
被请出了房间"
,
ygopro
.
constants
.
COLORS
.
RED
)
return
false
...
...
@@ -1263,7 +1266,7 @@ wait_room_start = (room, time)->
if
player
and
player
.
is_host
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"挂房间"
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
player
.
name
}
被系统请出了房间"
,
ygopro
.
constants
.
COLORS
.
RED
)
player
.
end
()
player
.
destroy
()
return
#tip
...
...
@@ -1320,7 +1323,7 @@ ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server)->
room
.
dueling_players
=
[]
for
player
in
room
.
players
when
player
.
pos
!=
7
room
.
dueling_players
[
player
.
pos
]
=
player
room
.
player_datas
.
push
ip
:
player
.
remoteAddress
,
name
:
player
.
name
room
.
player_datas
.
push
ip
:
player
.
ip
,
name
:
player
.
name
if
settings
.
modules
.
tips
ygopro
.
stoc_send_random_tip
(
client
)
return
...
...
@@ -1363,7 +1366,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
if
!
(
room
and
room
.
random_type
)
return
cancel
if
client
.
abuse_count
>=
5
log
.
warn
"BANNED CHAT"
,
client
.
name
,
client
.
remoteAddress
,
msg
log
.
warn
"BANNED CHAT"
,
client
.
name
,
client
.
ip
,
msg
ygopro
.
stoc_send_chat
(
client
,
"您已被禁言!"
,
ygopro
.
constants
.
COLORS
.
RED
)
return
true
oldmsg
=
msg
...
...
@@ -1371,13 +1374,13 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
regexp
=
new
RegExp
(
badword
,
'i'
)
return
msg
.
match
(
regexp
)
,
msg
))
log
.
warn
"BAD WORD LEVEL 3"
,
client
.
name
,
client
.
remoteAddress
,
oldmsg
log
.
warn
"BAD WORD LEVEL 3"
,
client
.
name
,
client
.
ip
,
oldmsg
cancel
=
true
if
client
.
abuse_count
>
0
ygopro
.
stoc_send_chat
(
client
,
"您的发言存在严重不适当的内容,禁止您使用随机对战功能!"
,
ygopro
.
constants
.
COLORS
.
RED
)
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"发言违规"
)
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"发言违规"
,
3
)
client
.
end
()
client
.
destroy
()
return
true
else
client
.
abuse_count
=
client
.
abuse_count
+
4
...
...
@@ -1386,7 +1389,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
regexp
=
new
RegExp
(
badword
,
'i'
)
return
msg
.
match
(
regexp
)
,
msg
))
log
.
warn
"BAD WORD LEVEL 2"
,
client
.
name
,
client
.
remoteAddress
,
oldmsg
log
.
warn
"BAD WORD LEVEL 2"
,
client
.
name
,
client
.
ip
,
oldmsg
client
.
abuse_count
=
client
.
abuse_count
+
3
ygopro
.
stoc_send_chat
(
client
,
"您的发言存在不适当的内容,发送失败!"
,
ygopro
.
constants
.
COLORS
.
RED
)
cancel
=
true
...
...
@@ -1398,7 +1401,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
return
,
msg
)
if
oldmsg
!=
msg
log
.
warn
"BAD WORD LEVEL 1"
,
client
.
name
,
client
.
remoteAddress
,
oldmsg
log
.
warn
"BAD WORD LEVEL 1"
,
client
.
name
,
client
.
ip
,
oldmsg
client
.
abuse_count
=
client
.
abuse_count
+
1
ygopro
.
stoc_send_chat
(
client
,
"请使用文明用语!"
)
struct
=
ygopro
.
structs
[
"chat"
]
...
...
@@ -1409,7 +1412,7 @@ ygopro.ctos_follow 'CHAT', true, (buffer, info, client, server)->
regexp
=
new
RegExp
(
badword
,
'i'
)
return
msg
.
match
(
regexp
)
,
msg
))
log
.
info
"BAD WORD LEVEL 0"
,
client
.
name
,
client
.
remoteAddress
,
oldmsg
log
.
info
"BAD WORD LEVEL 0"
,
client
.
name
,
client
.
ip
,
oldmsg
if
client
.
abuse_count
>=
5
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
client
.
name
}
已被禁言!"
,
ygopro
.
constants
.
COLORS
.
RED
)
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"发言违规"
)
...
...
@@ -1548,7 +1551,7 @@ setInterval ()->
room
.
last_active_time
=
moment
()
ROOM_ban_player
(
room
.
waiting_for_player
.
name
,
room
.
waiting_for_player
.
ip
,
"挂机"
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
room
.
waiting_for_player
.
name
}
被系统请出了房间"
,
ygopro
.
constants
.
COLORS
.
RED
)
room
.
waiting_for_player
.
server
.
end
()
room
.
waiting_for_player
.
server
.
destroy
()
else
if
time_passed
>=
(
settings
.
modules
.
hang_timeout
-
20
)
and
not
(
time_passed
%
10
)
ygopro
.
stoc_send_chat_to_room
(
room
,
"
#{
room
.
waiting_for_player
.
name
}
已经很久没有操作了,若继续挂机,将于
#{
settings
.
modules
.
hang_timeout
-
time_passed
}
秒后被请出房间"
,
ygopro
.
constants
.
COLORS
.
RED
)
return
...
...
ygopro-server.js
View file @
ce5b7b96
...
...
@@ -98,9 +98,9 @@
for
(
l
=
0
,
len1
=
ref
.
length
;
l
<
len1
;
l
++
)
{
player
=
ref
[
l
];
if
(
player
&&
player
.
name
===
name
)
{
settings
.
ban
.
banned_ip
.
push
(
player
.
remoteAddress
);
settings
.
ban
.
banned_ip
.
push
(
player
.
ip
);
ygopro
.
stoc_send_chat_to_room
(
room
,
player
.
name
+
"
被系统请出了房间
"
,
ygopro
.
constants
.
COLORS
.
RED
);
player
.
end
();
player
.
destroy
();
continue
;
}
}
...
...
@@ -283,7 +283,7 @@
max_player
=
type
===
'
T
'
?
4
:
2
;
playerbanned
=
bannedplayer
&&
bannedplayer
.
count
>
3
&&
moment
()
<
bannedplayer
.
time
;
result
=
_
.
find
(
ROOM_all
,
function
(
room
)
{
return
room
&&
room
.
random_type
!==
''
&&
!
room
.
started
&&
((
type
===
''
&&
room
.
random_type
!==
'
T
'
)
||
room
.
random_type
===
type
)
&&
room
.
get_playing_player
().
length
<
max_player
&&
(
room
.
get_host
()
===
null
||
room
.
get_host
().
remoteAddress
!==
ROOM_players_oppentlist
[
player_ip
])
&&
(
playerbanned
===
room
.
deprecated
);
return
room
&&
room
.
random_type
!==
''
&&
!
room
.
started
&&
((
type
===
''
&&
room
.
random_type
!==
'
T
'
)
||
room
.
random_type
===
type
)
&&
room
.
get_playing_player
().
length
<
max_player
&&
(
room
.
get_host
()
===
null
||
room
.
get_host
().
ip
!==
ROOM_players_oppentlist
[
player_ip
])
&&
(
playerbanned
===
room
.
deprecated
);
});
if
(
result
)
{
result
.
welcome
=
'
对手已经在等你了,开始决斗吧!
'
;
...
...
@@ -668,7 +668,7 @@
this
.
recorder_buffers
=
[];
this
.
players
=
[];
if
(
this
.
watcher
)
{
this
.
watcher
.
end
();
this
.
watcher
.
destroy
();
}
this
.
deleted
=
true
;
index
=
_
.
indexOf
(
ROOM_all
,
this
);
...
...
@@ -717,26 +717,16 @@
};
Room
.
prototype
.
connect
=
function
(
client
)
{
var
connect_count
,
host_player
;
var
host_player
;
this
.
players
.
push
(
client
);
client
.
ip
=
client
.
remoteAddress
;
connect_count
=
0
;
if
(
client
.
remoteAddress
!==
'
::ffff:127.0.0.1
'
)
{
if
(
connect_count
=
ROOM_connected_ip
[
client
.
remoteAddress
])
{
connect_count
++
;
}
else
{
connect_count
=
1
;
}
}
ROOM_connected_ip
[
client
.
remoteAddress
]
=
connect_count
;
if
(
this
.
random_type
)
{
client
.
abuse_count
=
0
;
host_player
=
this
.
get_host
();
if
(
host_player
&&
(
host_player
!==
client
))
{
ROOM_players_oppentlist
[
host_player
.
remoteAddress
]
=
client
.
remoteAddress
;
ROOM_players_oppentlist
[
client
.
remoteAddress
]
=
host_player
.
remoteAddress
;
ROOM_players_oppentlist
[
host_player
.
ip
]
=
client
.
ip
;
ROOM_players_oppentlist
[
client
.
ip
]
=
host_player
.
ip
;
}
else
{
ROOM_players_oppentlist
[
client
.
remoteAddress
]
=
null
;
ROOM_players_oppentlist
[
client
.
ip
]
=
null
;
}
}
if
(
this
.
established
)
{
...
...
@@ -789,12 +779,18 @@
})();
net
.
createServer
(
function
(
client
)
{
var
server
;
var
connect_count
,
server
;
client
.
ip
=
client
.
remoteAddress
;
connect_count
=
ROOM_connected_ip
[
client
.
ip
]
||
0
;
if
(
client
.
ip
!==
'
::ffff:127.0.0.1
'
)
{
connect_count
++
;
}
ROOM_connected_ip
[
client
.
ip
]
=
connect_count
;
server
=
new
net
.
Socket
();
client
.
server
=
server
;
client
.
setTimeout
(
300000
);
client
.
on
(
'
close
'
,
function
(
had_error
)
{
var
connect_count
,
room
;
var
room
;
room
=
ROOM_all
[
client
.
rid
];
connect_count
=
ROOM_connected_ip
[
client
.
ip
];
if
(
connect_count
>
0
)
{
...
...
@@ -808,10 +804,10 @@
room
.
disconnect
(
client
);
}
}
server
.
end
();
server
.
destroy
();
});
client
.
on
(
'
error
'
,
function
(
error
)
{
var
connect_count
,
room
;
var
room
;
room
=
ROOM_all
[
client
.
rid
];
connect_count
=
ROOM_connected_ip
[
client
.
ip
];
if
(
connect_count
>
0
)
{
...
...
@@ -825,10 +821,10 @@
room
.
disconnect
(
client
,
error
);
}
}
server
.
end
();
server
.
destroy
();
});
client
.
on
(
'
timeout
'
,
function
()
{
server
.
end
();
server
.
destroy
();
});
server
.
on
(
'
close
'
,
function
(
had_error
)
{
var
room
;
...
...
@@ -842,7 +838,7 @@
}
if
(
!
client
.
closed
)
{
ygopro
.
stoc_send_chat
(
client
,
"
服务器关闭了连接
"
,
ygopro
.
constants
.
COLORS
.
RED
);
client
.
end
();
client
.
destroy
();
}
});
server
.
on
(
'
error
'
,
function
(
error
)
{
...
...
@@ -855,12 +851,12 @@
server
.
closed
=
error
;
if
(
!
client
.
closed
)
{
ygopro
.
stoc_send_chat
(
client
,
"
服务器错误:
"
+
error
,
ygopro
.
constants
.
COLORS
.
RED
);
client
.
end
();
client
.
destroy
();
}
});
if
(
ROOM_bad_ip
[
client
.
remoteAddress
]
>
5
)
{
log
.
info
(
'
BAD IP
'
,
client
.
remoteAddress
);
client
.
end
();
if
(
ROOM_bad_ip
[
client
.
ip
]
>
5
)
{
log
.
info
(
'
BAD IP
'
,
client
.
ip
);
client
.
destroy
();
return
;
}
if
(
settings
.
modules
.
enable_cloud_replay
)
{
...
...
@@ -876,12 +872,12 @@
if
(
err
)
{
log
.
info
(
"
cloud replay unzip error:
"
+
err
);
ygopro
.
stoc_send_chat
(
client
,
"
播放录像出错
"
,
ygopro
.
constants
.
COLORS
.
RED
);
client
.
end
();
client
.
destroy
();
return
;
}
ygopro
.
stoc_send_chat
(
client
,
"
正在观看云录像:R#
"
+
replay
.
replay_id
+
"
"
+
replay
.
player_names
+
"
"
+
replay
.
date_time
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
client
.
write
(
replay_buffer
);
client
.
end
();
client
.
destroy
();
});
};
}
...
...
@@ -940,15 +936,15 @@
}
}
looplimit
++
;
if
(
looplimit
>
800
||
ROOM_bad_ip
[
client
.
remoteAddress
]
>
5
)
{
log
.
info
(
"
error ctos
"
,
client
.
name
,
client
.
remoteAddress
);
bad_ip_count
=
ROOM_bad_ip
[
client
.
remoteAddress
];
if
(
looplimit
>
800
||
ROOM_bad_ip
[
client
.
ip
]
>
5
)
{
log
.
info
(
"
error ctos
"
,
client
.
name
,
client
.
ip
);
bad_ip_count
=
ROOM_bad_ip
[
client
.
ip
];
if
(
bad_ip_count
)
{
ROOM_bad_ip
[
client
.
remoteAddress
]
=
bad_ip_count
+
1
;
ROOM_bad_ip
[
client
.
ip
]
=
bad_ip_count
+
1
;
}
else
{
ROOM_bad_ip
[
client
.
remoteAddress
]
=
1
;
ROOM_bad_ip
[
client
.
ip
]
=
1
;
}
client
.
end
();
client
.
destroy
();
break
;
}
}
...
...
@@ -1020,7 +1016,7 @@
looplimit
++
;
if
(
looplimit
>
800
)
{
log
.
info
(
"
error stoc
"
,
client
.
name
);
server
.
end
();
server
.
destroy
();
break
;
}
}
...
...
@@ -1050,7 +1046,7 @@
ygopro
.
stoc_die
(
client
,
settings
.
modules
.
stop
);
}
else
if
(
info
.
pass
.
toUpperCase
()
===
"
R
"
&&
settings
.
modules
.
enable_cloud_replay
)
{
ygopro
.
stoc_send_chat
(
client
,
"
以下是您近期的云录像,密码处输入 R#录像编号 即可观看
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
redisdb
.
lrange
(
client
.
remoteAddress
+
"
:replays
"
,
0
,
2
,
function
(
err
,
result
)
{
redisdb
.
lrange
(
client
.
ip
+
"
:replays
"
,
0
,
2
,
function
(
err
,
result
)
{
_
.
each
(
result
,
function
(
replay_id
,
id
)
{
redisdb
.
hgetall
(
"
replay:
"
+
replay_id
,
function
(
err
,
replay
)
{
if
(
err
||
!
replay
)
{
...
...
@@ -1068,12 +1064,12 @@
msg
:
1
,
code
:
2
});
client
.
end
();
client
.
destroy
();
}),
500
);
}
else
if
(
info
.
pass
.
slice
(
0
,
2
).
toUpperCase
()
===
"
R#
"
&&
settings
.
modules
.
enable_cloud_replay
)
{
replay_id
=
info
.
pass
.
split
(
"
#
"
)[
1
];
if
(
replay_id
>
0
&&
replay_id
<=
9
)
{
redisdb
.
lindex
(
client
.
remoteAddress
+
"
:replays
"
,
replay_id
-
1
,
function
(
err
,
replay_id
)
{
redisdb
.
lindex
(
client
.
ip
+
"
:replays
"
,
replay_id
-
1
,
function
(
err
,
replay_id
)
{
if
(
err
||
!
replay_id
)
{
if
(
err
)
{
log
.
info
(
"
cloud replay replayid error:
"
+
err
);
...
...
@@ -1097,7 +1093,7 @@
msg
:
4
,
code
:
settings
.
version
});
client
.
end
();
client
.
destroy
();
}
else
if
(
!
info
.
pass
.
length
&&
!
settings
.
modules
.
enable_random_duel
&&
!
settings
.
modules
.
enable_windbot
)
{
ygopro
.
stoc_die
(
client
,
"
房间名为空,请填写主机密码
"
);
}
else
if
(
info
.
pass
.
length
&&
settings
.
modules
.
mycard_auth
&&
info
.
pass
.
slice
(
0
,
2
)
!==
'
AI
'
)
{
...
...
@@ -1225,36 +1221,36 @@
});
}
else
if
(
!
client
.
name
||
client
.
name
===
""
)
{
ygopro
.
stoc_die
(
client
,
"
请输入正确的用户名
"
);
}
else
if
(
ROOM_connected_ip
[
client
.
remoteAddress
]
>
10
)
{
log
.
warn
(
"
MULTI LOGIN
"
,
client
.
name
,
client
.
remoteAddress
);
ygopro
.
stoc_die
(
client
,
"
同时开启的客户端数量过多
"
+
client
.
remoteAddress
);
}
else
if
(
ROOM_connected_ip
[
client
.
ip
]
>
5
)
{
log
.
warn
(
"
MULTI LOGIN
"
,
client
.
name
,
client
.
ip
);
ygopro
.
stoc_die
(
client
,
"
同时开启的客户端数量过多
"
+
client
.
ip
);
}
else
if
(
_
.
indexOf
(
settings
.
ban
.
banned_user
,
client
.
name
)
>
-
1
)
{
settings
.
ban
.
banned_ip
.
push
(
client
.
remoteAddress
);
log
.
warn
(
"
BANNED USER LOGIN
"
,
client
.
name
,
client
.
remoteAddress
);
settings
.
ban
.
banned_ip
.
push
(
client
.
ip
);
log
.
warn
(
"
BANNED USER LOGIN
"
,
client
.
name
,
client
.
ip
);
ygopro
.
stoc_die
(
client
,
"
您的账号已被封禁
"
);
}
else
if
(
_
.
indexOf
(
settings
.
ban
.
banned_ip
,
client
.
remoteAddress
)
>
-
1
)
{
log
.
warn
(
"
BANNED IP LOGIN
"
,
client
.
name
,
client
.
remoteAddress
);
}
else
if
(
_
.
indexOf
(
settings
.
ban
.
banned_ip
,
client
.
ip
)
>
-
1
)
{
log
.
warn
(
"
BANNED IP LOGIN
"
,
client
.
name
,
client
.
ip
);
ygopro
.
stoc_die
(
client
,
"
您的账号已被封禁
"
);
}
else
if
(
_
.
any
(
settings
.
ban
.
badword_level3
,
function
(
badword
)
{
var
regexp
;
regexp
=
new
RegExp
(
badword
,
'
i
'
);
return
name
.
match
(
regexp
);
},
name
=
client
.
name
))
{
log
.
warn
(
"
BAD NAME LEVEL 3
"
,
client
.
name
,
client
.
remoteAddress
);
log
.
warn
(
"
BAD NAME LEVEL 3
"
,
client
.
name
,
client
.
ip
);
ygopro
.
stoc_die
(
client
,
"
您的用户名存在不适当的内容
"
);
}
else
if
(
_
.
any
(
settings
.
ban
.
badword_level2
,
function
(
badword
)
{
var
regexp
;
regexp
=
new
RegExp
(
badword
,
'
i
'
);
return
name
.
match
(
regexp
);
},
name
=
client
.
name
))
{
log
.
warn
(
"
BAD NAME LEVEL 2
"
,
client
.
name
,
client
.
remoteAddress
);
log
.
warn
(
"
BAD NAME LEVEL 2
"
,
client
.
name
,
client
.
ip
);
ygopro
.
stoc_die
(
client
,
"
您的用户名存在不适当的内容
"
);
}
else
if
(
_
.
any
(
settings
.
ban
.
badword_level1
,
function
(
badword
)
{
var
regexp
;
regexp
=
new
RegExp
(
badword
,
'
i
'
);
return
name
.
match
(
regexp
);
},
name
=
client
.
name
))
{
log
.
warn
(
"
BAD NAME LEVEL 1
"
,
client
.
name
,
client
.
remoteAddress
);
log
.
warn
(
"
BAD NAME LEVEL 1
"
,
client
.
name
,
client
.
ip
);
ygopro
.
stoc_die
(
client
,
"
您的用户名存在不适当的内容,请注意更改
"
);
}
else
if
(
info
.
pass
.
length
&&
!
ROOM_validate
(
info
.
pass
))
{
ygopro
.
stoc_die
(
client
,
"
房间密码不正确
"
);
...
...
@@ -1267,7 +1263,7 @@
buffer
=
struct
.
buffer
;
ygopro
.
stoc_send_chat
(
client
,
"
您的版本号过低,可能出现未知问题,电脑用户请升级版本,YGOMobile用户请等待作者更新
"
,
ygopro
.
constants
.
COLORS
.
BABYBLUE
);
}
room
=
ROOM_find_or_create_by_name
(
info
.
pass
,
client
.
remoteAddress
);
room
=
ROOM_find_or_create_by_name
(
info
.
pass
,
client
.
ip
);
if
(
!
room
)
{
ygopro
.
stoc_die
(
client
,
"
服务器已经爆满,请稍候再试
"
);
}
else
if
(
room
.
error
)
{
...
...
@@ -1470,7 +1466,7 @@
if
(
client
.
kick_count
>=
5
)
{
ygopro
.
stoc_send_chat_to_room
(
room
,
client
.
name
+
"
被系统请出了房间
"
,
ygopro
.
constants
.
COLORS
.
RED
);
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"
挂房间
"
);
client
.
end
();
client
.
destroy
();
return
true
;
}
ygopro
.
stoc_send_chat_to_room
(
room
,
player
.
name
+
"
被请出了房间
"
,
ygopro
.
constants
.
COLORS
.
RED
);
...
...
@@ -1533,7 +1529,7 @@
if
(
player
&&
player
.
is_host
)
{
ROOM_ban_player
(
player
.
name
,
player
.
ip
,
"
挂房间
"
);
ygopro
.
stoc_send_chat_to_room
(
room
,
player
.
name
+
"
被系统请出了房间
"
,
ygopro
.
constants
.
COLORS
.
RED
);
player
.
end
();
player
.
destroy
();
}
}
}
...
...
@@ -1625,7 +1621,7 @@
}
room
.
dueling_players
[
player
.
pos
]
=
player
;
room
.
player_datas
.
push
({
ip
:
player
.
remoteAddress
,
ip
:
player
.
ip
,
name
:
player
.
name
});
}
...
...
@@ -1689,7 +1685,7 @@
return
cancel
;
}
if
(
client
.
abuse_count
>=
5
)
{
log
.
warn
(
"
BANNED CHAT
"
,
client
.
name
,
client
.
remoteAddress
,
msg
);
log
.
warn
(
"
BANNED CHAT
"
,
client
.
name
,
client
.
ip
,
msg
);
ygopro
.
stoc_send_chat
(
client
,
"
您已被禁言!
"
,
ygopro
.
constants
.
COLORS
.
RED
);
return
true
;
}
...
...
@@ -1699,13 +1695,13 @@
regexp
=
new
RegExp
(
badword
,
'
i
'
);
return
msg
.
match
(
regexp
);
},
msg
))
{
log
.
warn
(
"
BAD WORD LEVEL 3
"
,
client
.
name
,
client
.
remoteAddress
,
oldmsg
);
log
.
warn
(
"
BAD WORD LEVEL 3
"
,
client
.
name
,
client
.
ip
,
oldmsg
);
cancel
=
true
;
if
(
client
.
abuse_count
>
0
)
{
ygopro
.
stoc_send_chat
(
client
,
"
您的发言存在严重不适当的内容,禁止您使用随机对战功能!
"
,
ygopro
.
constants
.
COLORS
.
RED
);
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"
发言违规
"
);
ROOM_ban_player
(
client
.
name
,
client
.
ip
,
"
发言违规
"
,
3
);
client
.
end
();
client
.
destroy
();
return
true
;
}
else
{
client
.
abuse_count
=
client
.
abuse_count
+
4
;
...
...
@@ -1716,7 +1712,7 @@
regexp
=
new
RegExp
(
badword
,
'
i
'
);
return
msg
.
match
(
regexp
);
},
msg
))
{
log
.
warn
(
"
BAD WORD LEVEL 2
"
,
client
.
name
,
client
.
remoteAddress
,
oldmsg
);
log
.
warn
(
"
BAD WORD LEVEL 2
"
,
client
.
name
,
client
.
ip
,
oldmsg
);
client
.
abuse_count
=
client
.
abuse_count
+
3
;
ygopro
.
stoc_send_chat
(
client
,
"
您的发言存在不适当的内容,发送失败!
"
,
ygopro
.
constants
.
COLORS
.
RED
);
cancel
=
true
;
...
...
@@ -1727,7 +1723,7 @@
msg
=
msg
.
replace
(
regexp
,
"
**
"
);
},
msg
);
if
(
oldmsg
!==
msg
)
{
log
.
warn
(
"
BAD WORD LEVEL 1
"
,
client
.
name
,
client
.
remoteAddress
,
oldmsg
);
log
.
warn
(
"
BAD WORD LEVEL 1
"
,
client
.
name
,
client
.
ip
,
oldmsg
);
client
.
abuse_count
=
client
.
abuse_count
+
1
;
ygopro
.
stoc_send_chat
(
client
,
"
请使用文明用语!
"
);
struct
=
ygopro
.
structs
[
"
chat
"
];
...
...
@@ -1739,7 +1735,7 @@
regexp
=
new
RegExp
(
badword
,
'
i
'
);
return
msg
.
match
(
regexp
);
},
msg
))
{
log
.
info
(
"
BAD WORD LEVEL 0
"
,
client
.
name
,
client
.
remoteAddress
,
oldmsg
);
log
.
info
(
"
BAD WORD LEVEL 0
"
,
client
.
name
,
client
.
ip
,
oldmsg
);
}
}
if
(
client
.
abuse_count
>=
5
)
{
...
...
@@ -1951,7 +1947,7 @@
room
.
last_active_time
=
moment
();
ROOM_ban_player
(
room
.
waiting_for_player
.
name
,
room
.
waiting_for_player
.
ip
,
"
挂机
"
);
ygopro
.
stoc_send_chat_to_room
(
room
,
room
.
waiting_for_player
.
name
+
"
被系统请出了房间
"
,
ygopro
.
constants
.
COLORS
.
RED
);
room
.
waiting_for_player
.
server
.
end
();
room
.
waiting_for_player
.
server
.
destroy
();
}
else
if
(
time_passed
>=
(
settings
.
modules
.
hang_timeout
-
20
)
&&
!
(
time_passed
%
10
))
{
ygopro
.
stoc_send_chat_to_room
(
room
,
room
.
waiting_for_player
.
name
+
"
已经很久没有操作了,若继续挂机,将于
"
+
(
settings
.
modules
.
hang_timeout
-
time_passed
)
+
"
秒后被请出房间
"
,
ygopro
.
constants
.
COLORS
.
RED
);
}
...
...
ygopro.coffee
View file @
ce5b7b96
...
...
@@ -158,5 +158,5 @@ for name, declaration of structs_declaration
msg
:
1
code
:
2
}
if
client
client
.
end
()
if
client
client
.
destroy
()
if
client
return
\ No newline at end of file
ygopro.js
View file @
ce5b7b96
...
...
@@ -254,7 +254,7 @@
});
}
if
(
client
)
{
client
.
end
();
client
.
destroy
();
}
};
...
...
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