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
ef1b2058
Commit
ef1b2058
authored
Oct 21, 2013
by
神楽坂玲奈
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
。
parent
e3136397
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
91470 additions
and
69 deletions
+91470
-69
package.json
package.json
+2
-1
struct.coffee
struct.coffee
+91211
-0
tips.json
tips.json
+0
-0
ygopro-server.coffee
ygopro-server.coffee
+96
-24
ygopro-server.js
ygopro-server.js
+160
-43
ygopro-server.map
ygopro-server.map
+1
-1
No files found.
package.json
View file @
ef1b2058
...
@@ -18,7 +18,8 @@
...
@@ -18,7 +18,8 @@
"
freeport
"
:
"
*
"
,
"
freeport
"
:
"
*
"
,
"
struct
"
:
"
*
"
,
"
struct
"
:
"
*
"
,
"
inotify
"
:
"
*
"
,
"
inotify
"
:
"
*
"
,
"
request
"
:
"
*
"
"
request
"
:
"
*
"
,
"
mongoose
"
:
"
*
"
},
},
"license"
:
"GPLv3"
,
"license"
:
"GPLv3"
,
"main"
:
"ygopro-server.js"
,
"main"
:
"ygopro-server.js"
,
...
...
struct.coffee
0 → 100644
View file @
ef1b2058
This source diff could not be displayed because it is too large. You can
view the blob
instead.
tips.json
deleted
100644 → 0
View file @
e3136397
ygopro-server.coffee
View file @
ef1b2058
...
@@ -39,15 +39,26 @@ class Room
...
@@ -39,15 +39,26 @@ class Room
@
port
=
port
@
port
=
port
@
alive
=
true
@
alive
=
true
@
players
=
[]
@
players
=
[]
@
dueling
=
false
@
established
=
false
@
pos_name
=
{}
#重构
@
add_client
(
client
)
@
add_client
(
client
)
Room
.
all
.
push
this
#这个故事告诉我们没事不要乱new Room
Room
.
all
.
push
this
#这个故事告诉我们没事不要乱new Room
delete
:
(
room
)
->
delete
:
(
room
)
->
delete
Room
.
all
[
_
.
indexOf
(
Room
.
all
,
room
)]
Room
.
all
.
splice
(
_
.
indexOf
(
Room
.
all
,
room
),
1
)
add_client
:
(
client
)
->
add_client
:
(
client
)
->
@
players
.
push
{
client
:
client
,
name
:
client
.
player
}
@
players
.
push
{
client
:
client
,
name
:
client
.
player
}
remove_client
:
(
client
,
error
)
->
@
players
=
_
.
reject
@
players
,
(
player
)
->
player
.
client
is
client
for
player
in
@
players
stoc_send_chat
(
player
.
client
,
"
#{
client
.
player
}
离开了游戏
#{
if
error
then
":
#{
error
}
"
else
''
}
"
)
toString
:
->
"room:
#{
@
name
}
#{
@
port
}
#{
@
alive
?
'alive'
:
'not-alive'
}
#{
@
dueling
?
'dueling'
:
'not-dueling'
}
[
#{
(
"client
#{
typeof
player
.
client
}
server
#{
typeof
player
.
server
}
#{
player
.
name
}
#{
player
.
pos
}
. "
for
player
in
@
players
)
}
]
#{
JSON
.
stringify
@
pos_name
}
"
#需要性能优化,建立个索引
#需要性能优化,建立个索引
@
find_by_name
:
(
name
)
->
@
find_by_name
:
(
name
)
->
...
@@ -60,6 +71,10 @@ class Room
...
@@ -60,6 +71,10 @@ class Room
_
.
find
@
all
,
(
room
)
->
_
.
find
@
all
,
(
room
)
->
_
.
some
room
.
players
,
(
player
)
->
_
.
some
room
.
players
,
(
player
)
->
player
.
client
==
client
player
.
client
==
client
@
find_by_server
:
(
server
)
->
_
.
find
@
all
,
(
room
)
->
_
.
some
room
.
players
,
(
player
)
->
player
.
server
==
server
...
@@ -69,7 +84,6 @@ debug = false
...
@@ -69,7 +84,6 @@ debug = false
if
process
.
argv
[
2
]
==
'--debug'
if
process
.
argv
[
2
]
==
'--debug'
settings
.
port
++
settings
.
port
++
settings
.
http_port
++
settings
.
http_port
++
debug
=
true
#结构体定义
#结构体定义
structs
=
{}
structs
=
{}
...
@@ -117,7 +131,6 @@ ctos_follow = (proto, synchronous, callback)->
...
@@ -117,7 +131,6 @@ ctos_follow = (proto, synchronous, callback)->
#消息发送函数,至少要把俩合起来....
#消息发送函数,至少要把俩合起来....
stoc_send
=
(
socket
,
proto
,
info
)
->
stoc_send
=
(
socket
,
proto
,
info
)
->
#console.log proto, proto_structs.STOC[proto], structs[proto_structs.STOC[proto]]
#console.log proto, proto_structs.STOC[proto], structs[proto_structs.STOC[proto]]
if
typeof
info
==
'undefined'
if
typeof
info
==
'undefined'
buffer
=
""
buffer
=
""
else
if
Buffer
.
isBuffer
(
info
)
else
if
Buffer
.
isBuffer
(
info
)
...
@@ -140,11 +153,9 @@ stoc_send = (socket, proto, info)->
...
@@ -140,11 +153,9 @@ stoc_send = (socket, proto, info)->
header
.
writeUInt8
proto
,
2
header
.
writeUInt8
proto
,
2
socket
.
write
header
socket
.
write
header
socket
.
write
buffer
if
buffer
.
length
socket
.
write
buffer
if
buffer
.
length
console
.
log
'stoc_sent:'
,
buffer
if
debug
ctos_send
=
(
socket
,
proto
,
info
)
->
ctos_send
=
(
socket
,
proto
,
info
)
->
#console.log proto, proto_structs.CTOS[proto], structs[proto_structs.CTOS[proto]]
#console.log proto, proto_structs.CTOS[proto], structs[proto_structs.CTOS[proto]]
if
typeof
info
==
'undefined'
if
typeof
info
==
'undefined'
buffer
=
""
buffer
=
""
else
if
Buffer
.
isBuffer
(
info
)
else
if
Buffer
.
isBuffer
(
info
)
...
@@ -167,7 +178,6 @@ ctos_send = (socket, proto, info)->
...
@@ -167,7 +178,6 @@ ctos_send = (socket, proto, info)->
header
.
writeUInt8
proto
,
2
header
.
writeUInt8
proto
,
2
socket
.
write
header
socket
.
write
header
socket
.
write
buffer
if
buffer
.
length
socket
.
write
buffer
if
buffer
.
length
console
.
log
'ctos_sent:'
,
buffer
if
debug
#util
#util
stoc_send_chat
=
(
client
,
msg
,
player
=
8
)
->
stoc_send_chat
=
(
client
,
msg
,
player
=
8
)
->
...
@@ -191,7 +201,6 @@ server_listener = (port, client, server)->
...
@@ -191,7 +201,6 @@ server_listener = (port, client, server)->
server
.
write
buffer
server
.
write
buffer
server
.
on
"data"
,
(
data
)
->
server
.
on
"data"
,
(
data
)
->
console
.
log
'server: '
,
data
if
debug
stoc_buffer
=
Buffer
.
concat
([
stoc_buffer
,
data
],
stoc_buffer
.
length
+
data
.
length
)
stoc_buffer
=
Buffer
.
concat
([
stoc_buffer
,
data
],
stoc_buffer
.
length
+
data
.
length
)
#buffer的错误使用方式,好孩子不要学
#buffer的错误使用方式,好孩子不要学
...
@@ -208,14 +217,13 @@ server_listener = (port, client, server)->
...
@@ -208,14 +217,13 @@ server_listener = (port, client, server)->
break
break
else
else
if
stoc_buffer
.
length
>=
2
+
stoc_message_length
if
stoc_buffer
.
length
>=
2
+
stoc_message_length
console
.
log
constants
.
STOC
[
stoc_proto
]
if
debug
if
stoc_follows
[
stoc_proto
]
if
stoc_follows
[
stoc_proto
]
b
=
stoc_buffer
.
slice
(
3
,
stoc_message_length
-
1
+
3
)
b
=
stoc_buffer
.
slice
(
3
,
stoc_message_length
-
1
+
3
)
if
struct
=
structs
[
proto_structs
.
STOC
[
constants
.
STOC
[
stoc_proto
]]]
if
struct
=
structs
[
proto_structs
.
STOC
[
constants
.
STOC
[
stoc_proto
]]]
struct
.
_setBuff
(
b
)
struct
.
_setBuff
(
b
)
set
Timeout
stoc_follows
[
stoc_proto
].
callback
,
0
,
b
,
struct
.
fields
,
client
,
server
set
Immediate
stoc_follows
[
stoc_proto
].
callback
,
b
,
struct
.
fields
,
client
,
server
else
else
set
Timeout
stoc_follows
[
stoc_proto
].
callback
,
0
,
b
,
null
,
client
,
server
set
Immediate
stoc_follows
[
stoc_proto
].
callback
,
b
,
null
,
client
,
server
stoc_buffer
=
stoc_buffer
.
slice
(
2
+
stoc_message_length
)
stoc_buffer
=
stoc_buffer
.
slice
(
2
+
stoc_message_length
)
stoc_message_length
=
0
stoc_message_length
=
0
...
@@ -247,10 +255,10 @@ listener = net.createServer (client) ->
...
@@ -247,10 +255,10 @@ listener = net.createServer (client) ->
server
=
new
net
.
Socket
()
server
=
new
net
.
Socket
()
server
.
on
"error"
,
(
e
)
->
server
.
on
"error"
,
(
e
)
->
stoc_send_chat
(
client
,
"服务器错误"
)
console
.
log
"server error
#{
e
}
"
console
.
log
"server error
#{
e
}
"
client
.
on
"data"
,
(
data
)
->
client
.
on
"data"
,
(
data
)
->
console
.
log
'client: '
,
data
if
debug
ctos_buffer
=
Buffer
.
concat
([
ctos_buffer
,
data
],
ctos_buffer
.
length
+
data
.
length
)
#buffer的错误使用方式,好孩子不要学
ctos_buffer
=
Buffer
.
concat
([
ctos_buffer
,
data
],
ctos_buffer
.
length
+
data
.
length
)
#buffer的错误使用方式,好孩子不要学
while
true
while
true
...
@@ -266,7 +274,6 @@ listener = net.createServer (client) ->
...
@@ -266,7 +274,6 @@ listener = net.createServer (client) ->
break
break
else
else
if
ctos_buffer
.
length
>=
2
+
ctos_message_length
if
ctos_buffer
.
length
>=
2
+
ctos_message_length
console
.
log
constants
.
CTOS
[
ctos_proto
]
if
debug
if
ctos_follows
[
ctos_proto
]
if
ctos_follows
[
ctos_proto
]
b
=
ctos_buffer
.
slice
(
3
,
ctos_message_length
-
1
+
3
)
b
=
ctos_buffer
.
slice
(
3
,
ctos_message_length
-
1
+
3
)
if
struct
=
structs
[
proto_structs
.
CTOS
[
constants
.
CTOS
[
ctos_proto
]]]
if
struct
=
structs
[
proto_structs
.
CTOS
[
constants
.
CTOS
[
ctos_proto
]]]
...
@@ -288,12 +295,20 @@ listener = net.createServer (client) ->
...
@@ -288,12 +295,20 @@ listener = net.createServer (client) ->
client
.
pre_connecion_buffers
.
push
data
client
.
pre_connecion_buffers
.
push
data
client
.
on
"error"
,
(
e
)
->
client
.
on
"error"
,
(
e
)
->
room
=
Room
.
find_by_client
(
client
)
room
.
remove_client
(
client
,
e
)
if
room
console
.
log
"client error
#{
e
}
"
console
.
log
"client error
#{
e
}
"
server
.
end
()
server
.
end
()
client
.
on
"close"
,
(
had_error
)
->
client
.
on
"close"
,
(
had_error
)
->
console
.
log
"client closed
#{
had_error
}
"
console
.
log
"client closed
#{
had_error
}
"
return
if
had_error
room
=
Room
.
find_by_client
(
client
)
room
.
remove_client
(
client
)
if
room
server
.
end
()
server
.
end
()
.
listen
settings
.
port
,
null
,
null
,
->
.
listen
settings
.
port
,
null
,
null
,
->
console
.
log
"server started on
#{
settings
.
ip
}
:
#{
settings
.
port
}
"
console
.
log
"server started on
#{
settings
.
ip
}
:
#{
settings
.
port
}
"
...
@@ -309,10 +324,10 @@ ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
...
@@ -309,10 +324,10 @@ ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
}
}
client
.
end
()
client
.
end
()
else
if
!
room_name
.
length
else
if
!
room_name
.
length
stoc_send
client
,
'JOIN_GAME'
,
{}
stoc_send
_chat
(
client
,
"房间为空,请修改房间名"
)
stoc_send
client
,
'
HS_PLAYER_ENTER'
,
{
stoc_send
client
,
'
ERROR_MSG'
,
{
name
:
'提示: 房间为空,请修改房间名'
msg
:
1
pos
:
0
code
:
2
}
}
else
if
room_name
==
'[INCORRECT]'
#房间密码验证
else
if
room_name
==
'[INCORRECT]'
#房间密码验证
stoc_send
client
,
'ERROR_MSG'
,{
stoc_send
client
,
'ERROR_MSG'
,{
...
@@ -323,6 +338,7 @@ ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
...
@@ -323,6 +338,7 @@ ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
else
else
if
client
.
player
!=
'[INCORRECT]'
#用户验证
if
client
.
player
!=
'[INCORRECT]'
#用户验证
room
=
Room
.
find_by_name
(
room_name
)
room
=
Room
.
find_by_name
(
room_name
)
console
.
log
"[join]find_by_room
#{
room_name
}
#{
room
}
"
if
room
if
room
room
.
add_client
client
room
.
add_client
client
if
room
.
established
if
room
.
established
...
@@ -331,6 +347,7 @@ ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
...
@@ -331,6 +347,7 @@ ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
else
else
freeport
(
err
,
port
)
->
freeport
(
err
,
port
)
->
room
=
Room
.
find_by_name
(
room_name
)
room
=
Room
.
find_by_name
(
room_name
)
console
.
log
"[join freeport]find_by_room
#{
room_name
}
#{
room
}
"
if
room
#如果等freeport的时间差又来了个.....
if
room
#如果等freeport的时间差又来了个.....
room
.
add_client
client
room
.
add_client
client
if
room
.
established
if
room
.
established
...
@@ -359,6 +376,7 @@ ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
...
@@ -359,6 +376,7 @@ ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
process
=
spawn
'./ygopro'
,
param
,
cwd
:
'ygocore'
process
=
spawn
'./ygopro'
,
param
,
cwd
:
'ygocore'
room
.
process
=
process
room
.
process
=
process
process
.
on
'exit'
,
(
code
)
->
process
.
on
'exit'
,
(
code
)
->
console
.
log
"room process
#{
port
}
exited with code
#{
code
}
"
room
.
delete
()
room
.
delete
()
process
.
stdout
.
once
'data'
,
(
data
)
->
process
.
stdout
.
once
'data'
,
(
data
)
->
room
.
established
=
true
room
.
established
=
true
...
@@ -403,21 +421,62 @@ stoc_follow 'GAME_MSG', false, (buffer, info, client, server)->
...
@@ -403,21 +421,62 @@ stoc_follow 'GAME_MSG', false, (buffer, info, client, server)->
stoc_send_chat
client
,
line
stoc_send_chat
client
,
line
#积分
#积分
if
constants
.
MSG
[
msg
]
==
'WIN'
if
constants
.
MSG
[
msg
]
==
'WIN'
player
=
buffer
.
readUInt8
(
1
)
room
=
Room
.
find_by_client
(
client
)
type
=
buffer
.
readUInt8
(
2
)
if
!
room
console
.
log
player
,
type
console
.
log
"[WARN]win: can't find room by player
#{
client
.
player
}
"
return
if
_
.
startsWith
(
room
.
name
,
'M#'
)
and
room
.
dueling
room
.
dueling
=
false
loser_name
=
room
.
pos_name
[
buffer
.
readUInt8
(
1
)]
winner_name
=
room
.
pos_name
[
1
-
buffer
.
readUInt8
(
1
)]
#type = buffer.readUInt8(2)
User
.
findOne
{
name
:
winner_name
},
(
err
,
winner
)
->
if
(
err
)
console
.
log
"
#{
err
}
when finding user
#{
winner_name
}
"
else
if
(
!
winner
)
console
.
log
"user
#{
winner_name
}
not exist"
else
User
.
findOne
{
name
:
loser_name
},
(
err
,
loser
)
->
if
(
err
)
console
.
log
"
#{
err
}
when finding user
#{
loser_name
}
"
else
if
(
!
loser
)
console
.
log
"user
#{
loser_name
}
not exist"
else
winner
.
points
+=
10
loser
.
points
-=
5
winner
.
save
()
loser
.
save
()
console
.
log
"
#{
winner
}
增加10点积分,现在有
#{
winner
.
points
}
点"
console
.
log
"
#{
loser
}
减少5点积分,现在有
#{
loser
.
points
}
点"
stoc_follow
'HS_PLAYER_CHANGE'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
client
.
ready
=
info
.
status
&
0xF
!=
0
client
.
pos
=
info
.
status
>>
4
console
.
log
client
.
ready
,
client
.
pos
mongoose
=
require
'mongoose'
mongoose
.
connect
(
'mongodb://localhost/mycard'
);
User
=
mongoose
.
model
'User'
,
name
:
String
points
:
Number
#stoc_follow 'HS_PLAYER_CHANGE', false, (buffer, info, client, server)->
#stoc_follow 'HS_PLAYER_CHANGE', false, (buffer, info, client, server)->
# console.log 'HS_PLAYER_CHANGE', info
# console.log 'HS_PLAYER_CHANGE', info
#房间管理
stoc_follow
'HS_PLAYER_ENTER'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
room
=
Room
.
find_by_client
(
client
)
if
!
room
console
.
log
"[WARN]player_enter: can't find room by player
#{
client
.
player
}
"
return
room
.
pos_name
[
info
.
pos
]
=
info
.
name
#房间数量
#房间数量
http
.
createServer
(
request
,
response
)
->
http
.
createServer
(
request
,
response
)
->
if
url
.
parse
(
request
.
url
).
pathname
==
'/count.json'
if
url
.
parse
(
request
.
url
).
pathname
==
'/count.json'
response
.
writeHead
(
200
);
response
.
writeHead
(
200
);
response
.
end
(
rooms
.
length
.
toString
())
response
.
end
(
Room
.
all
.
length
.
toString
())
else
else
response
.
writeHead
(
404
);
response
.
writeHead
(
404
);
response
.
end
();
response
.
end
();
...
@@ -443,11 +502,11 @@ inotify.addWatch
...
@@ -443,11 +502,11 @@ inotify.addWatch
console
.
log
'[warn] event without filename'
console
.
log
'[warn] event without filename'
setInterval
()
->
setInterval
()
->
for
room
in
rooms
for
room
in
Room
.
all
if
room
.
alive
if
room
.
alive
room
.
alive
=
false
room
.
alive
=
false
else
else
console
.
log
"kill
#{
port
}
#{
room
}
"
console
.
log
"kill
room
#{
room
.
port
}
"
room
.
process
.
kill
()
room
.
process
.
kill
()
,
900000
,
900000
...
@@ -472,6 +531,19 @@ request
...
@@ -472,6 +531,19 @@ request
stoc_follow
'DUEL_START'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
stoc_follow
'DUEL_START'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
stoc_send_random_tip
(
client
)
stoc_send_random_tip
(
client
)
room
=
Room
.
find_by_client
(
client
)
if
!
room
console
.
log
"[WARN]duel start: can't find room by player
#{
client
.
player
}
"
return
room
.
dueling
=
true
if
_
.
startsWith
(
room
.
name
,
'M#'
)
User
.
findOne
{
name
:
client
.
player
},
(
err
,
user
)
->
if
!
user
user
=
new
User
({
name
:
client
.
player
,
points
:
0
})
user
.
save
()
stoc_send_chat
(
client
,
"积分系统测试中,你现在有
#{
user
.
points
}
点积分,这些积分以后可能会重置"
)
ctos_follow
'CHAT'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
ctos_follow
'CHAT'
,
false
,
(
buffer
,
info
,
client
,
server
)
->
if
_
.
trim
(
info
.
msg
)
==
'/tip'
if
_
.
trim
(
info
.
msg
)
==
'/tip'
stoc_send_random_tip
(
client
)
stoc_send_random_tip
(
client
)
...
...
ygopro-server.js
View file @
ef1b2058
// Generated by CoffeeScript 1.6.3
// Generated by CoffeeScript 1.6.3
(
function
()
{
(
function
()
{
var
Inotify
,
Room
,
Struct
,
constants
,
ctos_follow
,
ctos_follows
,
ctos_send
,
debug
,
declaration
,
dialogues
,
field
,
freeport
,
fs
,
http
,
inotify
,
listener
,
name
,
net
,
path
,
proto_structs
,
request
,
result
,
server_listener
,
settings
,
spawn
,
stoc_follow
,
stoc_follows
,
stoc_send
,
stoc_send_chat
,
stoc_send_random_tip
,
stoc_send_tip
,
structs
,
structs_declaration
,
tips
,
type
,
typedefs
,
url
,
_
,
_i
,
_len
;
var
Inotify
,
Room
,
Struct
,
User
,
constants
,
ctos_follow
,
ctos_follows
,
ctos_send
,
debug
,
declaration
,
dialogues
,
field
,
freeport
,
fs
,
http
,
inotify
,
listener
,
mongoose
,
name
,
net
,
path
,
proto_structs
,
request
,
result
,
server_listener
,
settings
,
spawn
,
stoc_follow
,
stoc_follows
,
stoc_send
,
stoc_send_chat
,
stoc_send_random_tip
,
stoc_send_tip
,
structs
,
structs_declaration
,
tips
,
type
,
typedefs
,
url
,
_
,
_i
,
_len
;
net
=
require
(
'
net
'
);
net
=
require
(
'
net
'
);
...
@@ -48,12 +48,15 @@
...
@@ -48,12 +48,15 @@
this
.
port
=
port
;
this
.
port
=
port
;
this
.
alive
=
true
;
this
.
alive
=
true
;
this
.
players
=
[];
this
.
players
=
[];
this
.
dueling
=
false
;
this
.
established
=
false
;
this
.
pos_name
=
{};
this
.
add_client
(
client
);
this
.
add_client
(
client
);
Room
.
all
.
push
(
this
);
Room
.
all
.
push
(
this
);
}
}
Room
.
prototype
[
"
delete
"
]
=
function
(
room
)
{
Room
.
prototype
[
"
delete
"
]
=
function
(
room
)
{
return
delete
Room
.
all
[
_
.
indexOf
(
Room
.
all
,
room
)]
;
return
Room
.
all
.
splice
(
_
.
indexOf
(
Room
.
all
,
room
),
1
)
;
};
};
Room
.
prototype
.
add_client
=
function
(
client
)
{
Room
.
prototype
.
add_client
=
function
(
client
)
{
...
@@ -63,6 +66,38 @@
...
@@ -63,6 +66,38 @@
});
});
};
};
Room
.
prototype
.
remove_client
=
function
(
client
,
error
)
{
var
player
,
_i
,
_len
,
_ref
,
_results
;
this
.
players
=
_
.
reject
(
this
.
players
,
function
(
player
)
{
return
player
.
client
===
client
;
});
_ref
=
this
.
players
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
player
=
_ref
[
_i
];
_results
.
push
(
stoc_send_chat
(
player
.
client
,
""
+
client
.
player
+
"
离开了游戏
"
+
(
error
?
"
:
"
+
error
:
''
)));
}
return
_results
;
};
Room
.
prototype
.
toString
=
function
()
{
var
player
,
_ref
,
_ref1
;
return
"
room:
"
+
this
.
name
+
"
"
+
this
.
port
+
"
"
+
((
_ref
=
this
.
alive
)
!=
null
?
_ref
:
{
'
alive
'
:
'
not-alive
'
})
+
"
"
+
((
_ref1
=
this
.
dueling
)
!=
null
?
_ref1
:
{
'
dueling
'
:
'
not-dueling
'
})
+
"
[
"
+
((
function
()
{
var
_i
,
_len
,
_ref2
,
_results
;
_ref2
=
this
.
players
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref2
.
length
;
_i
<
_len
;
_i
++
)
{
player
=
_ref2
[
_i
];
_results
.
push
(
"
client
"
+
(
typeof
player
.
client
)
+
"
server
"
+
(
typeof
player
.
server
)
+
"
"
+
player
.
name
+
"
"
+
player
.
pos
+
"
.
"
);
}
return
_results
;
}).
call
(
this
))
+
"
]
"
+
(
JSON
.
stringify
(
this
.
pos_name
));
};
Room
.
find_by_name
=
function
(
name
)
{
Room
.
find_by_name
=
function
(
name
)
{
return
_
.
find
(
this
.
all
,
function
(
room
)
{
return
_
.
find
(
this
.
all
,
function
(
room
)
{
return
room
.
name
===
name
;
return
room
.
name
===
name
;
...
@@ -83,6 +118,14 @@
...
@@ -83,6 +118,14 @@
});
});
};
};
Room
.
find_by_server
=
function
(
server
)
{
return
_
.
find
(
this
.
all
,
function
(
room
)
{
return
_
.
some
(
room
.
players
,
function
(
player
)
{
return
player
.
server
===
server
;
});
});
};
return
Room
;
return
Room
;
})();
})();
...
@@ -92,7 +135,6 @@
...
@@ -92,7 +135,6 @@
if
(
process
.
argv
[
2
]
===
'
--debug
'
)
{
if
(
process
.
argv
[
2
]
===
'
--debug
'
)
{
settings
.
port
++
;
settings
.
port
++
;
settings
.
http_port
++
;
settings
.
http_port
++
;
debug
=
true
;
}
}
structs
=
{};
structs
=
{};
...
@@ -205,10 +247,7 @@
...
@@ -205,10 +247,7 @@
header
.
writeUInt8
(
proto
,
2
);
header
.
writeUInt8
(
proto
,
2
);
socket
.
write
(
header
);
socket
.
write
(
header
);
if
(
buffer
.
length
)
{
if
(
buffer
.
length
)
{
socket
.
write
(
buffer
);
return
socket
.
write
(
buffer
);
}
if
(
debug
)
{
return
console
.
log
(
'
stoc_sent:
'
,
buffer
);
}
}
};
};
...
@@ -242,10 +281,7 @@
...
@@ -242,10 +281,7 @@
header
.
writeUInt8
(
proto
,
2
);
header
.
writeUInt8
(
proto
,
2
);
socket
.
write
(
header
);
socket
.
write
(
header
);
if
(
buffer
.
length
)
{
if
(
buffer
.
length
)
{
socket
.
write
(
buffer
);
return
socket
.
write
(
buffer
);
}
if
(
debug
)
{
return
console
.
log
(
'
ctos_sent:
'
,
buffer
);
}
}
};
};
...
@@ -273,9 +309,6 @@
...
@@ -273,9 +309,6 @@
}
}
server
.
on
(
"
data
"
,
function
(
data
)
{
server
.
on
(
"
data
"
,
function
(
data
)
{
var
b
,
struct
;
var
b
,
struct
;
if
(
debug
)
{
console
.
log
(
'
server:
'
,
data
);
}
stoc_buffer
=
Buffer
.
concat
([
stoc_buffer
,
data
],
stoc_buffer
.
length
+
data
.
length
);
stoc_buffer
=
Buffer
.
concat
([
stoc_buffer
,
data
],
stoc_buffer
.
length
+
data
.
length
);
while
(
true
)
{
while
(
true
)
{
if
(
stoc_message_length
===
0
)
{
if
(
stoc_message_length
===
0
)
{
...
@@ -292,16 +325,13 @@
...
@@ -292,16 +325,13 @@
}
}
}
else
{
}
else
{
if
(
stoc_buffer
.
length
>=
2
+
stoc_message_length
)
{
if
(
stoc_buffer
.
length
>=
2
+
stoc_message_length
)
{
if
(
debug
)
{
console
.
log
(
constants
.
STOC
[
stoc_proto
]);
}
if
(
stoc_follows
[
stoc_proto
])
{
if
(
stoc_follows
[
stoc_proto
])
{
b
=
stoc_buffer
.
slice
(
3
,
stoc_message_length
-
1
+
3
);
b
=
stoc_buffer
.
slice
(
3
,
stoc_message_length
-
1
+
3
);
if
(
struct
=
structs
[
proto_structs
.
STOC
[
constants
.
STOC
[
stoc_proto
]]])
{
if
(
struct
=
structs
[
proto_structs
.
STOC
[
constants
.
STOC
[
stoc_proto
]]])
{
struct
.
_setBuff
(
b
);
struct
.
_setBuff
(
b
);
set
Timeout
(
stoc_follows
[
stoc_proto
].
callback
,
0
,
b
,
struct
.
fields
,
client
,
server
);
set
Immediate
(
stoc_follows
[
stoc_proto
].
callback
,
b
,
struct
.
fields
,
client
,
server
);
}
else
{
}
else
{
set
Timeout
(
stoc_follows
[
stoc_proto
].
callback
,
0
,
b
,
null
,
client
,
server
);
set
Immediate
(
stoc_follows
[
stoc_proto
].
callback
,
b
,
null
,
client
,
server
);
}
}
}
}
stoc_buffer
=
stoc_buffer
.
slice
(
2
+
stoc_message_length
);
stoc_buffer
=
stoc_buffer
.
slice
(
2
+
stoc_message_length
);
...
@@ -335,13 +365,11 @@
...
@@ -335,13 +365,11 @@
client
.
pre_connecion_buffers
=
new
Array
();
client
.
pre_connecion_buffers
=
new
Array
();
server
=
new
net
.
Socket
();
server
=
new
net
.
Socket
();
server
.
on
(
"
error
"
,
function
(
e
)
{
server
.
on
(
"
error
"
,
function
(
e
)
{
stoc_send_chat
(
client
,
"
服务器错误
"
);
return
console
.
log
(
"
server error
"
+
e
);
return
console
.
log
(
"
server error
"
+
e
);
});
});
client
.
on
(
"
data
"
,
function
(
data
)
{
client
.
on
(
"
data
"
,
function
(
data
)
{
var
b
,
struct
;
var
b
,
struct
;
if
(
debug
)
{
console
.
log
(
'
client:
'
,
data
);
}
ctos_buffer
=
Buffer
.
concat
([
ctos_buffer
,
data
],
ctos_buffer
.
length
+
data
.
length
);
ctos_buffer
=
Buffer
.
concat
([
ctos_buffer
,
data
],
ctos_buffer
.
length
+
data
.
length
);
while
(
true
)
{
while
(
true
)
{
if
(
ctos_message_length
===
0
)
{
if
(
ctos_message_length
===
0
)
{
...
@@ -358,9 +386,6 @@
...
@@ -358,9 +386,6 @@
}
}
}
else
{
}
else
{
if
(
ctos_buffer
.
length
>=
2
+
ctos_message_length
)
{
if
(
ctos_buffer
.
length
>=
2
+
ctos_message_length
)
{
if
(
debug
)
{
console
.
log
(
constants
.
CTOS
[
ctos_proto
]);
}
if
(
ctos_follows
[
ctos_proto
])
{
if
(
ctos_follows
[
ctos_proto
])
{
b
=
ctos_buffer
.
slice
(
3
,
ctos_message_length
-
1
+
3
);
b
=
ctos_buffer
.
slice
(
3
,
ctos_message_length
-
1
+
3
);
if
(
struct
=
structs
[
proto_structs
.
CTOS
[
constants
.
CTOS
[
ctos_proto
]]])
{
if
(
struct
=
structs
[
proto_structs
.
CTOS
[
constants
.
CTOS
[
ctos_proto
]]])
{
...
@@ -387,11 +412,24 @@
...
@@ -387,11 +412,24 @@
}
}
});
});
client
.
on
(
"
error
"
,
function
(
e
)
{
client
.
on
(
"
error
"
,
function
(
e
)
{
var
room
;
room
=
Room
.
find_by_client
(
client
);
if
(
room
)
{
room
.
remove_client
(
client
,
e
);
}
console
.
log
(
"
client error
"
+
e
);
console
.
log
(
"
client error
"
+
e
);
return
server
.
end
();
return
server
.
end
();
});
});
return
client
.
on
(
"
close
"
,
function
(
had_error
)
{
return
client
.
on
(
"
close
"
,
function
(
had_error
)
{
var
room
;
console
.
log
(
"
client closed
"
+
had_error
);
console
.
log
(
"
client closed
"
+
had_error
);
if
(
had_error
)
{
return
;
}
room
=
Room
.
find_by_client
(
client
);
if
(
room
)
{
room
.
remove_client
(
client
);
}
return
server
.
end
();
return
server
.
end
();
});
});
}).
listen
(
settings
.
port
,
null
,
null
,
function
()
{
}).
listen
(
settings
.
port
,
null
,
null
,
function
()
{
...
@@ -412,10 +450,10 @@
...
@@ -412,10 +450,10 @@
});
});
return
client
.
end
();
return
client
.
end
();
}
else
if
(
!
room_name
.
length
)
{
}
else
if
(
!
room_name
.
length
)
{
stoc_send
(
client
,
'
JOIN_GAME
'
,
{}
);
stoc_send
_chat
(
client
,
"
房间为空,请修改房间名
"
);
return
stoc_send
(
client
,
'
HS_PLAYER_ENTER
'
,
{
return
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
name
:
'
提示: 房间为空,请修改房间名
'
,
msg
:
1
,
pos
:
0
code
:
2
});
});
}
else
if
(
room_name
===
'
[INCORRECT]
'
)
{
}
else
if
(
room_name
===
'
[INCORRECT]
'
)
{
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
...
@@ -426,6 +464,7 @@
...
@@ -426,6 +464,7 @@
}
else
{
}
else
{
if
(
client
.
player
!==
'
[INCORRECT]
'
)
{
if
(
client
.
player
!==
'
[INCORRECT]
'
)
{
room
=
Room
.
find_by_name
(
room_name
);
room
=
Room
.
find_by_name
(
room_name
);
console
.
log
(
"
[join]find_by_room
"
+
room_name
+
"
"
+
room
);
if
(
room
)
{
if
(
room
)
{
room
.
add_client
(
client
);
room
.
add_client
(
client
);
if
(
room
.
established
)
{
if
(
room
.
established
)
{
...
@@ -437,6 +476,7 @@
...
@@ -437,6 +476,7 @@
return
freeport
(
function
(
err
,
port
)
{
return
freeport
(
function
(
err
,
port
)
{
var
param
,
process
;
var
param
,
process
;
room
=
Room
.
find_by_name
(
room_name
);
room
=
Room
.
find_by_name
(
room_name
);
console
.
log
(
"
[join freeport]find_by_room
"
+
room_name
+
"
"
+
room
);
if
(
room
)
{
if
(
room
)
{
room
.
add_client
(
client
);
room
.
add_client
(
client
);
if
(
room
.
established
)
{
if
(
room
.
established
)
{
...
@@ -469,6 +509,7 @@
...
@@ -469,6 +509,7 @@
});
});
room
.
process
=
process
;
room
.
process
=
process
;
process
.
on
(
'
exit
'
,
function
(
code
)
{
process
.
on
(
'
exit
'
,
function
(
code
)
{
console
.
log
(
"
room process
"
+
port
+
"
exited with code
"
+
code
);
return
room
[
"
delete
"
]();
return
room
[
"
delete
"
]();
});
});
return
process
.
stdout
.
once
(
'
data
'
,
function
(
data
)
{
return
process
.
stdout
.
once
(
'
data
'
,
function
(
data
)
{
...
@@ -515,7 +556,7 @@
...
@@ -515,7 +556,7 @@
});
});
stoc_follow
(
'
GAME_MSG
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
stoc_follow
(
'
GAME_MSG
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
var
card
,
line
,
msg
,
player
,
_j
,
_len1
,
_ref
;
var
card
,
line
,
loser_name
,
msg
,
room
,
winner_name
,
_j
,
_len1
,
_ref
;
msg
=
buffer
.
readInt8
(
0
);
msg
=
buffer
.
readInt8
(
0
);
if
(
constants
.
MSG
[
msg
]
===
'
SUMMONING
'
||
constants
.
MSG
[
msg
]
===
'
SPSUMMONING
'
)
{
if
(
constants
.
MSG
[
msg
]
===
'
SUMMONING
'
||
constants
.
MSG
[
msg
]
===
'
SPSUMMONING
'
)
{
card
=
buffer
.
readUInt32LE
(
1
);
card
=
buffer
.
readUInt32LE
(
1
);
...
@@ -528,16 +569,74 @@
...
@@ -528,16 +569,74 @@
}
}
}
}
if
(
constants
.
MSG
[
msg
]
===
'
WIN
'
)
{
if
(
constants
.
MSG
[
msg
]
===
'
WIN
'
)
{
player
=
buffer
.
readUInt8
(
1
);
room
=
Room
.
find_by_client
(
client
);
type
=
buffer
.
readUInt8
(
2
);
if
(
!
room
)
{
return
console
.
log
(
player
,
type
);
console
.
log
(
"
[WARN]win: can't find room by player
"
+
client
.
player
);
return
;
}
if
(
_
.
startsWith
(
room
.
name
,
'
M#
'
)
&&
room
.
dueling
)
{
room
.
dueling
=
false
;
loser_name
=
room
.
pos_name
[
buffer
.
readUInt8
(
1
)];
winner_name
=
room
.
pos_name
[
1
-
buffer
.
readUInt8
(
1
)];
return
User
.
findOne
({
name
:
winner_name
},
function
(
err
,
winner
)
{
if
(
err
)
{
return
console
.
log
(
""
+
err
+
"
when finding user
"
+
winner_name
);
}
else
if
(
!
winner
)
{
return
console
.
log
(
"
user
"
+
winner_name
+
"
not exist
"
);
}
else
{
return
User
.
findOne
({
name
:
loser_name
},
function
(
err
,
loser
)
{
if
(
err
)
{
return
console
.
log
(
""
+
err
+
"
when finding user
"
+
loser_name
);
}
else
if
(
!
loser
)
{
return
console
.
log
(
"
user
"
+
loser_name
+
"
not exist
"
);
}
else
{
winner
.
points
+=
10
;
loser
.
points
-=
5
;
winner
.
save
();
loser
.
save
();
console
.
log
(
""
+
winner
+
"
增加10点积分,现在有
"
+
winner
.
points
+
"
点
"
);
return
console
.
log
(
""
+
loser
+
"
减少5点积分,现在有
"
+
loser
.
points
+
"
点
"
);
}
});
}
});
}
}
});
stoc_follow
(
'
HS_PLAYER_CHANGE
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
client
.
ready
=
info
.
status
&
0xF
!==
0
;
client
.
pos
=
info
.
status
>>
4
;
return
console
.
log
(
client
.
ready
,
client
.
pos
);
});
mongoose
=
require
(
'
mongoose
'
);
mongoose
.
connect
(
'
mongodb://localhost/mycard
'
);
User
=
mongoose
.
model
(
'
User
'
,
{
name
:
String
,
points
:
Number
});
stoc_follow
(
'
HS_PLAYER_ENTER
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
var
room
;
room
=
Room
.
find_by_client
(
client
);
if
(
!
room
)
{
console
.
log
(
"
[WARN]player_enter: can't find room by player
"
+
client
.
player
);
return
;
}
}
return
room
.
pos_name
[
info
.
pos
]
=
info
.
name
;
});
});
http
.
createServer
(
function
(
request
,
response
)
{
http
.
createServer
(
function
(
request
,
response
)
{
if
(
url
.
parse
(
request
.
url
).
pathname
===
'
/count.json
'
)
{
if
(
url
.
parse
(
request
.
url
).
pathname
===
'
/count.json
'
)
{
response
.
writeHead
(
200
);
response
.
writeHead
(
200
);
return
response
.
end
(
rooms
.
length
.
toString
());
return
response
.
end
(
Room
.
all
.
length
.
toString
());
}
else
{
}
else
{
response
.
writeHead
(
404
);
response
.
writeHead
(
404
);
return
response
.
end
();
return
response
.
end
();
...
@@ -571,14 +670,15 @@
...
@@ -571,14 +670,15 @@
});
});
setInterval
(
function
()
{
setInterval
(
function
()
{
var
room
,
_j
,
_len1
,
_results
;
var
room
,
_j
,
_len1
,
_ref
,
_results
;
_ref
=
Room
.
all
;
_results
=
[];
_results
=
[];
for
(
_j
=
0
,
_len1
=
rooms
.
length
;
_j
<
_len1
;
_j
++
)
{
for
(
_j
=
0
,
_len1
=
_ref
.
length
;
_j
<
_len1
;
_j
++
)
{
room
=
rooms
[
_j
];
room
=
_ref
[
_j
];
if
(
room
.
alive
)
{
if
(
room
.
alive
)
{
_results
.
push
(
room
.
alive
=
false
);
_results
.
push
(
room
.
alive
=
false
);
}
else
{
}
else
{
console
.
log
(
"
kill
"
+
port
+
"
"
+
room
);
console
.
log
(
"
kill
room
"
+
room
.
port
);
_results
.
push
(
room
.
process
.
kill
());
_results
.
push
(
room
.
process
.
kill
());
}
}
}
}
...
@@ -615,7 +715,28 @@
...
@@ -615,7 +715,28 @@
});
});
stoc_follow
(
'
DUEL_START
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
stoc_follow
(
'
DUEL_START
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
return
stoc_send_random_tip
(
client
);
var
room
;
stoc_send_random_tip
(
client
);
room
=
Room
.
find_by_client
(
client
);
if
(
!
room
)
{
console
.
log
(
"
[WARN]duel start: can't find room by player
"
+
client
.
player
);
return
;
}
room
.
dueling
=
true
;
if
(
_
.
startsWith
(
room
.
name
,
'
M#
'
))
{
return
User
.
findOne
({
name
:
client
.
player
},
function
(
err
,
user
)
{
if
(
!
user
)
{
user
=
new
User
({
name
:
client
.
player
,
points
:
0
});
user
.
save
();
}
return
stoc_send_chat
(
client
,
"
积分系统测试中,你现在有
"
+
user
.
points
+
"
点积分,这些积分以后可能会重置
"
);
});
}
});
});
ctos_follow
(
'
CHAT
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
ctos_follow
(
'
CHAT
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
...
@@ -655,7 +776,3 @@
...
@@ -655,7 +776,3 @@
}).
call
(
this
);
}).
call
(
this
);
/*
//@ sourceMappingURL=ygopro-server.map
*/
ygopro-server.map
View file @
ef1b2058
...
@@ -6,5 +6,5 @@
...
@@ -6,5 +6,5 @@
"ygopro-server.coffee"
"ygopro-server.coffee"
],
],
"names": [],
"names": [],
"mappings": ";AACA;CAAA,KAAA,i
YAAA;;CAAA,CAAA,CAAA,EAAM,EAAA;;CAAN,CACA,CAAO,CAAP,EAAO,CAAA;;CADP,CAEA,CAAA,EAAM,EAAA;;CAFN,CAGA,CAAO,CAAP,EAAO,CAAA;;CAHP,CAIA,CAAK,CAAA,GAAA;;CAJL,CAKA,CAAQ,EAAR,EAAQ,QAAA;;CALR,CAQA,CAAW,IAAA,CAAX,EAAW;;CARX,CASA,CAAS,GAAT,CAAS,CAAA;;CATT,CAUA,CAAI,IAAA,KAAA;;CAVJ,CAWA,CAAA,IAAQ,YAAA;;CAXR,CAYA,CAAa,EAAb,EAAQ;;CAZR,CAaA,CAAK,IAAL,CAAA,WAAA;;CAbA,CAcA,CAAU,IAAV,EAAU;;CAdV,CAeA,CAAU,IAAV,EAAU;;CAfV,CAkBA,CAAsB,IAAA,SAAA,GAAtB;;CAlBA,CAmBA,CAAW,IAAA,CAAX,SAAW;;CAnBX,CAoBA,CAAgB,IAAA,MAAhB,SAAgB;;CApBhB,CAqBA,CAAY,IAAA,EAAZ,SAAY;;CArBZ,CAwBA,CAAW,IAAA,CAAX,OAAW;;CAxBX,CA0BM;CACJ,CAAA,CAAA,CAAA;;CAQa,CAAO,CAAP,CAAA,EAAA,QAAC;CACZ,EAAQ,CAAP,EAAD;CAAA,EACQ,CAAP,EAAD;CADA,EAES,CAAR,CAAD,CAAA;CAFA,CAAA,CAGW,CAAV,EAAD,CAAA;CAHA,GAIC,EAAD,IAAA;CAJA,EAKQ,CAAJ,EAAJ;CAdF,IAQa;;CARb,EAgBQ,CAAA,KAAC;AACP,CAAA,CAAoC,CAApB,CAAL,EAAX,CAAgB,MAAhB;CAjBF,IAgBQ;;CAhBR,EAmBY,GAAA,GAAC,CAAb;CACG,GAAA,GAAO,MAAR;CAAc,CAAS,IAAR,EAAA;CAAD,CAAuB,EAAN,EAAY,EAAZ;CADrB,OACV;CApBF,IAmBY;;CAnBZ,EAwBe,CAAf,KAAgB,GAAhB;CACG,CAAY,CAAb,CAAA,KAAc,IAAd;CACO,GAAD,CAAS,UAAb;CADF,MAAa;CAzBf,IAwBe;;CAxBf,EA2Be,CAAf,KAAgB,GAAhB;CACG,CAAY,CAAb,CAAA,KAAc,IAAd;CACO,GAAD,CAAS,UAAb;CADF,MAAa;CA5Bf,IA2Be;;CA3Bf,EA8BiB,CAAjB,EAAiB,GAAC,KAAlB;CACG,CAAY,CAAb,CAAA,KAAc,IAAd;CACG,CAAoB,CAAA,CAArB,EAAqB,CAArB,EAAsB,MAAtB;CACS,IAAU,CAAX,WAAN;CADF,QAAqB;CADvB,MAAa;CA/Bf,IA8BiB;;CA9BjB;;CA3BF;;CAAA,CAkEA,CAAQ,EAAR;;CACA,CAAA,EAAG,CAAmB,EAAZ,EAAV;AACE,CAAA,CAAA,EAAA,IAAQ;AACR,CADA,CAAA,EACA,IAAQ,CAAR;CADA,EAEQ,CAAR,CAAA;IAtEF;;CAAA,CAyEA,CAAU,IAAV;;AACA,CAAA,MAAA,oBAAA;6CAAA;CACE,EAAS,CAAT,EAAA;AACA,CAAA,QAAA,yCAAA;+BAAA;CACE,GAAG,CAAK,CAAR,EAAA;CACE,IAAY,GAAZ,QAAO;CAAP,SAAA,KACO;CAAgB,CAAyB,CAAa,CAAtC,CAAA,CAAM,EAAN,IAAA;CAAhB;CADP;CAEO,EAA8B,CAAI,IAAlC,UAAO,MAAA;CAFd,QADF;MAAA,EAAA;CAKE,EAAO,CAAP,CAAY,GAAZ;CACA,GAAyB,IAAzB;CAAA,EAAO,CAAP,IAAgB,EAAhB;UADA;CAEA,GAAG,CAAK,CAAR,EAAA;CACE,CAAyB,EAAzB,CAAA,CAAM,IAAN;MADF,IAAA;CAGE,GAAG,GAAQ,GAAX;CACE,CAA0B,EAA1B,CAAmB,CAAb,CAA4B,KAAlC;MADF,MAAA;CAGE,GAAO,CAAW,CAAX,MAAP;YANJ;UAPF;QADF;CAAA,IADA;CAAA,EAgBgB,CAAhB,EAhBA,CAgBQ;CAjBV,EA1EA;;CAAA,CA+FA,CAAe,SAAf;;CA/FA,CAgGA,CAAe,SAAf;;CAhGA,CAiGA,CAAc,EAAA,GAAA,CAAC,EAAf;CACE,OAAA,QAAA;AAAG,CAAH,GAAA,CAAG,CAAA,EAAH;CACE;CAAA,UAAA;2BAAA;CACE,GAAG,CAAA,GAAH;CACE,EAAQ,EAAR,KAAA;CACA,eAFF;UADF;CAAA,MAAA;AAI0B,CAA1B,GAAyB,CAAgB,CAAzC,GAAmC;CAAnC,aAAM,CAAN;QALF;MAAA;CAMa,EAAS,EAAT,MAAb,CAAa;CAAS,CAAW,IAAV,EAAA;CAAD,CAAkC,IAAb,KAAA;CAP/B;CAjGd,EAiGc;;CAjGd,CAyGA,CAAc,EAAA,GAAA,CAAC,EAAf;CACE,OAAA,QAAA;AAAG,CAAH,GAAA,CAAG,CAAA,EAAH;CACE;CAAA,UAAA;2BAAA;CACE,GAAG,CAAA,GAAH;CACE,EAAQ,EAAR,KAAA;CACA,eAFF;UADF;CAAA,MAAA;AAI0B,CAA1B,GAAyB,CAAgB,CAAzC,GAAmC;CAAnC,aAAM,CAAN;QALF;MAAA;CAMa,EAAS,EAAT,MAAb,CAAa;CAAS,CAAW,IAAV,EAAA;CAAD,CAAkC,IAAb,KAAA;CAP/B;CAzGd,EAyGc;;CAzGd,CAoHA,CAAY,CAAA,CAAA,CAAA,GAAZ;CAGE,OAAA,gCAAA;AAAG,CAAH,GAAA,CAAkB,CAAf,KAAH;CACE,CAAA,CAAS,GAAT;CACa,GAAP,EAFR,EAEQ;CACN,EAAS,CAAT,EAAA;MAHF;CAKE,EAAS,CAA2B,CAAA,CAApC,CAAiB,MAAa;CAA9B,KACA,EAAA;CADA,EAEA,CAAA,EAAA;CAFA,EAGS,GAAT;MARF;AAUG,CAAH,GAAA,CAAG,CAAA,EAAH;CACE;CAAA,UAAA;2BAAA;CACE,GAAG,CAAA,GAAH;CACE,EAAQ,EAAR,KAAA;CACA,eAFF;UADF;CAAA,MAAA;AAI0B,CAA1B,GAAyB,CAAgB,CAAzC,GAAmC;CAAnC,aAAM,CAAN;QALF;MAVA;CAAA,EAiBa,CAAb,EAAA;CAjBA,CAkBwC,CAAH,CAArC,EAAM,OAAN;CAlBA,CAmByB,EAAzB,CAAA,CAAM,IAAN;CAnBA,GAoBA,CAAA,CAAM;CACN,GAAA,EAA6B;CAA7B,IAAA,CAAA;MArBA;CAsBA,GAAA,CAAA;CAAQ,CAAkB,CAA1B,GAAA,CAAO,KAAP,CAAA;MAzBU;CApHZ,EAoHY;;CApHZ,CA+IA,CAAY,CAAA,CAAA,CAAA,GAAZ;CAGE,OAAA,gCAAA;AAAG,CAAH,GAAA,CAAkB,CAAf,KAAH;CACE,CAAA,CAAS,GAAT;CACa,GAAP,EAFR,EAEQ;CACN,EAAS,CAAT,EAAA;MAHF;CAKE,EAAS,CAA2B,CAAA,CAApC,CAAiB,MAAa;CAA9B,KACA,EAAA;CADA,EAEA,CAAA,EAAA;CAFA,EAGS,GAAT;MARF;AAUG,CAAH,GAAA,CAAG,CAAA,EAAH;CACE;CAAA,UAAA;2BAAA;CACE,GAAG,CAAA,GAAH;CACE,EAAQ,EAAR,KAAA;CACA,eAFF;UADF;CAAA,MAAA;AAI0B,CAA1B,GAAyB,CAAgB,CAAzC,GAAmC;CAAnC,aAAM,CAAN;QALF;MAVA;CAAA,EAiBa,CAAb,EAAA;CAjBA,CAkBwC,CAAH,CAArC,EAAM,OAAN;CAlBA,CAmByB,EAAzB,CAAA,CAAM,IAAN;CAnBA,GAoBA,CAAA,CAAM;CACN,GAAA,EAA6B;CAA7B,IAAA,CAAA;MArBA;CAsBA,GAAA,CAAA;CAAQ,CAAkB,CAA1B,GAAA,CAAO,KAAP,CAAA;MAzBU;CA/IZ,EA+IY;;CA/IZ,CA2KA,CAAiB,GAAA,GAAC,KAAlB;;GAAwC,GAAT;MAC7B;CAAU,CAAQ,IAAlB,GAAA,EAAA;CAA0B,CAChB,IAAR;CADwB,CAElB,CAAN,GAAA;CAHa,KACf;CA5KF,EA2KiB;;CA3KjB,CAoLA,CAAkB,CAAA,EAAA,GAAC,MAAnB;CACE,OAAA,6DAAA;CAAA,EAAmB,CAAnB,EAAM,GAAN;CAAA,EACA,CAAA,GAAO,KAAM;CADb,EAGkB,CAAlB,EAAkB,KAAlB;CAHA,EAIsB,CAAtB,eAAA;CAJA,EAKa,CAAb,MAAA;CAEA;CAAA,QAAA,oCAAA;yBAAA;CACE,IAAA,CAAA;CADF,IAPA;CAAA,CAUA,CAAkB,CAAlB,EAAM,GAAa;CACjB,QAAA,CAAA;CAAA,GAAgC,CAAhC,CAAA;CAAA,CAAwB,CAAxB,CAAA,GAAO,CAAP,EAAA;QAAA;CAAA,CAC0C,CAA5B,CAAc,EAA5B,KAAA;CAGA,EAAA,CAAA,SAAM;CACJ,GAAG,CAAuB,GAA1B,WAAG;CACD,GAAG,EAAA,IAAH,CAAc;CACZ,EAAsB,QAAW,CAAjC,OAAA;MADF,MAAA;CAGE,iBAHF;YADF;CAAA,GAKQ,CAAc,CALtB,IAAA;CAME,GAAG,EAAA,IAAH,CAAc;CACZ,EAAa,MAAA,CAAb,CAAwB,CAAxB;MADF,MAAA;CAGE,iBAHF;YANF;MAAA,IAAA;CAWE,EAA6B,CAA1B,EAAA,IAAH,CAAc,QAAd;CACE,GAA0C,CAA1C,OAAA;CAAA,EAAA,CAA2B,GAApB,EAAc,CAAM,IAA3B;cAAA;CACA,GAAG,MAAa,EAAhB;CACE,CAAyB,CAArB,EAAA,MAAW,GAAf,KAAyB;CACzB,EAAY,CAAT,EAAA,CAAiB,EAA4B,CAAM,GAArB,CAAjC;CACE,KAAM,EAAN,QAAA;CAAA,CAC8C,IAAY,EAA1D,EAAA,EAAwB,IAAxB;MAFF,UAAA;CAIE,CAA8C,EAA9C,EAAA,EAAA,EAAA,EAAwB,IAAxB;gBANJ;cADA;CAAA,EASc,EAAA,MAAd,CAAA,OAAc;CATd,EAUsB,SAAtB,OAAA;CAVA,EAWa,OAAb,EAAA;MAZF,MAAA;CAcE,iBAdF;YAXF;UADF;CAJA,MAIA;AA4BA,CAAA,GAAA,EAAA,IAAoB,CAApB,CAAoB;CACX,GAAP,CAAA,CAAM,SAAN;QAlCc;CAAlB,IAAkB;CAVlB,CA8CA,CAAmB,CAAnB,EAAM,CAAN,EAAoB;CAClB,EAAA,GAAA,CAAO,QAAM;CACN,EAAP,GAAM,OAAN;CAFF,IAAmB;CAIZ,CAAP,CAAmB,GAAb,CAAN,EAAoB,EAApB;CACE,EAAA,GAAA,CAAO,EAAP,OAAa;CACN,EAAP,GAAM,OAAN;CAFF,IAAmB;CAvOrB,EAoLkB;;CApLlB,CA6OA,CAAW,GAAiB,EAA5B,CAA6B,GAAlB;CACT,OAAA,4CAAA;CAAA,EAAmB,CAAnB,CAAA,CAAM,GAAN;CAAA,EAEkB,CAAlB,EAAkB,KAAlB;CAFA,EAGsB,CAAtB,eAAA;CAHA,EAIa,CAAb,MAAA;CAJA,EAMmC,CAAnC,CAAmC,CAA7B,eAAN;CANA,EAQa,CAAb,EAAA;CARA,CASA,CAAmB,CAAnB,EAAM,CAAN,EAAoB;CACV,EAAR,IAAO,MAAP,EAAa;CADf,IAAmB;CATnB,CAYA,CAAkB,CAAlB,EAAM,GAAa;CACjB,QAAA,CAAA;CAAA,GAAgC,CAAhC,CAAA;CAAA,CAAwB,CAAxB,CAAA,GAAO,CAAP,EAAA;QAAA;CAAA,CAC0C,CAA5B,CAAc,EAA5B,KAAA;CAEA,EAAA,CAAA,SAAM;CACJ,GAAG,CAAuB,GAA1B,WAAG;CACD,GAAG,EAAA,IAAH,CAAc;CACZ,EAAsB,QAAW,CAAjC,OAAA;MADF,MAAA;CAGE,iBAHF;YADF;CAAA,GAKQ,CAAc,CALtB,IAAA;CAME,GAAG,EAAA,IAAH,CAAc;CACZ,EAAa,MAAA,CAAb,CAAwB,CAAxB;MADF,MAAA;CAGE,iBAHF;YANF;MAAA,IAAA;CAWE,EAA6B,CAA1B,EAAA,IAAH,CAAc,QAAd;CACE,GAA0C,CAA1C,OAAA;CAAA,EAAA,CAA2B,GAApB,EAAc,CAAM,IAA3B;cAAA;CACA,GAAG,MAAa,EAAhB;CACE,CAAyB,CAArB,EAAA,MAAW,GAAf,KAAyB;CACzB,EAAY,CAAT,EAAA,CAAiB,EAA4B,CAAM,GAArB,CAAjC;CACE,KAAM,EAAN,QAAA;CAAA,CAC8C,IAAY,EAA1D,EAAA,EAAwB,IAAxB;MAFF,UAAA;CAIE,CAA8C,EAA9C,EAAA,EAAA,EAAA,EAAwB,IAAxB;gBANJ;cADA;CAAA,EASc,EAAA,MAAd,CAAA,OAAc;CATd,EAUsB,SAAtB,OAAA;CAVA,EAWa,OAAb,EAAA;MAZF,MAAA;CAcE,iBAdF;YAXF;UADF;CAHA,MAGA;AA4BA,CAAA,GAAA,EAAA,IAAoB,CAApB,CAAoB;CAClB,GAAG,EAAM,EAAT,CAAA;CACS,GAAP,CAAA,CAAM,WAAN;MADF,IAAA;CAGS,GAAP,EAAM,WAAN,IAA4B;UAJhC;QAhCgB;CAAlB,IAAkB;CAZlB,CAkDA,CAAmB,CAAnB,EAAM,CAAN,EAAoB;CAClB,EAAA,GAAA,CAAO,QAAM;CACN,EAAP,GAAM,OAAN;CAFF,IAAmB;CAIZ,CAAP,CAAmB,GAAb,CAAN,EAAoB,EAApB;CACE,EAAA,GAAA,CAAO,EAAP,OAAa;CACN,EAAP,GAAM,OAAN;CAFF,IAAmB;CAvDV,CA0DY,CA1DK,CAAjB,EAAA,EA0DK,CAAmB;CACzB,CAAK,CAAb,CAAA,GAAO,CAAiC,GAAxC,SAAa;CA3DJ,EA0DwB;;CAvSnC,CA0SA,CAAiC,CAAjC,EAAiC,GAAC,EAAlC,EAAA;CACS,EAAS,CAAI,EAAd,KAAN;CADF,EAAiC;;CA1SjC,CA6SA,CAAgC,CAAA,CAAhC,CAAgC,GAAC,EAAjC;CACE,OAAA,OAAA;CAAA,EAAY,CAAZ,KAAA;CACA,GAAA,CAAmB,EAAhB,CAAwB;CACzB,CAAkB,IAAlB,GAAA,EAAA;CAA8B,CACvB,CAAL,KAAA;CAD4B,CAEtB,EAAN,GAF4B,CAE5B;CAFF,OAAA;CAIO,EAAP,GAAM,OAAN;AACO,CAAD,GAAA,EANR,GAMkB;CAChB,CAAkB,IAAlB,GAAA,EAAA;CACU,CAAQ,IAAlB,GAAA,IAAA,IAAA;CAAqC,CAC7B,EAAN,IAAA,SADmC;CAAA,CAE9B,CAAL,KAAA;CAVJ,OAQE;IAIM,CAAa,CAZrB,GAYQ,IAZR;CAaE,CAAkB,IAAlB,GAAA,EAAA;CAA8B,CACvB,CAAL,KAAA;CAD4B,CAEtB,EAAN,IAAA;CAFF,OAAA;CAIO,EAAP,GAAM,OAAN;MAjBF;CAmBE,GAAG,CAAiB,CAApB,OAAA;CACE,EAAO,CAAP,IAAA,CAAO,GAAA;CACP,GAAG,IAAH;CACE,GAAI,EAAJ,IAAA;CACA,GAAG,MAAH,CAAA;CACS,CAAmB,CAAa,CAApB,EAAb,CAAN,EAAuC,EAAvC,QAAA;CACkB,CAAW,EAAP,EAApB,SAAA,MAAA;CADF,YAAuC;YAH3C;MAAA,IAAA;CAMW,CAAM,CAAN,CAAA,IAAT,CAAU,QAAV;CACE,aAAA,EAAA;CAAA,EAAO,CAAP,KAAO,GAAP;CACA,GAAG,QAAH;CACE,GAAI,EAAJ,IAAA,IAAA;CACA,GAAG,OAAH,GAAA;CACS,CAAmB,CAAa,CAApB,EAAb,CAAN,EAAuC,EAAvC,YAAA;CACkB,CAAW,EAAP,EAApB,SAAA,UAAA;CADF,gBAAuC;gBAH3C;MAAA,QAAA;CAME,EAAA,CAAG,UAAH;CACE,CAAkB,IAAlB,GAAA,EAAA,KAAA;CAA8B,CACvB,CAAL,eAAA;CAD4B,CAEtB,EAAN,cAAA;CAFF,iBAAA;CAIO,EAAP,GAAM,iBAAN;MALF,UAAA;CAOE,CAA2B,CAAhB,CAAX,EAAW,GAAA,OAAX;CACA,GAAG,CAAoB,IAAV,GAAV,IAAH;CACE,CAAY,CAAJ,CAAA,CAAR,aAAA;IACM,CAAoB,CAF5B,GAEkB,GAAV,MAFR;CAGE,CAAY,CAAJ,CAAA,CAAR,aAAA;CACO,EAAQ,CAAT,CAAC,CAJT,GAI0B,SAJ1B,+BAIiB;CACf,IAAK,aAAL;CAAA,IACM,GAAM,UAAZ;MANF,YAAA;CAQE,CAAY,CAAJ,CAAA,CAAR,aAAA;kBATF;CAAA,GAWA,CAAK,EAAL,SAAA;CAXA,CAY4B,CAAlB,EAAA,EAAV,GAAU,MAAV;CAAmC,CAAK,CAAL,MAAA,SAAA;CAZnC,iBAYU;CAZV,EAae,CAAX,GAAJ,SAAA;CAbA,CAcA,CAAmB,CAAA,EAAnB,CAAO,EAAa,OAApB;CACO,GAAD,IAAA,iBAAJ;CADF,gBAAmB;CAEX,CAAoB,CAAA,CAA5B,EAAc,CAAP,EAAsB,cAA7B;CACE,EAAmB,CAAf,OAAJ,OAAA;CACC,CAAoB,CAAA,CAArB,EAAqB,CAArB,EAAsB,gBAAtB;CACS,CAAc,CAAa,CAAlC,EAAM,CAAN,EAAkC,EAAlC,gBAAA;CACkB,CAAM,EAAtB,EAA4B,SAA5B,cAAA;CADF,oBAAkC;CADpC,kBAAqB;CAFvB,gBAA4B;gBA7BhC;cAFO;CAAT,UAAS;UARb;MAAA,EAAA;CA6CE,CAAkB,IAAlB,EAAA,CAAA,EAAA;CAA8B,CACvB,CAAL,OAAA;CAD4B,CAEtB,EAAN,MAAA;CAFF,SAAA;CAIO,EAAP,GAAM,SAAN;QApEJ;MAF8B;CAAhC,EAAgC;;CA7ShC,CAwXA,CAAgC,CAAA,CAAhC,CAAgC,GAAC,EAAjC;CACE,CAAkB,EAAlB,EAAA,GAAA;CAA0B,CAChB,IAAR;CADwB,CAEnB,CAAL,GAAA,mBAFwB;CAA1B,KAAA;CAIU,CAAQ,IAAlB,GAAA,EAAA;CAA0B,CAChB,IAAR;CADwB,CAEnB,CAAL,GAAA,gEAFwB;CALI,KAK9B;CALF,EAAgC;;CAxXhC,CAmYA,CAAY,MAAZ;;CAnYA,CAoYA,KAAA;CACE,CAAK,CAAL,CAAA,+BAAA;CAAA,CACM,EAAN;EACE,CAAA,CAHJ,CAGI,GAAA,CAAC;CACD,EAAY,CAAZ,KAAA;CACQ,EAAR,CAAqB,GAAd,EAAM,EAAb,CAAA;CALJ,EAGI;;CAvYJ,CA2YA,CAA+B,CAAA,CAA/B,CAA+B,GAAC,CAAhC,CAAA;CACE,OAAA,gCAAA;CAAA,EAAA,CAAA,EAAY,EAAN;CACN,EAAiB,CAAjB,CAAyB,IAAb,EAAT,EAAH;CACE,EAAO,CAAP,EAAA,MAAO;CACP,GAAG,EAAH,GAAa;CACX;CAAA,YAAA,gCAAA;2BAAA;CACE,CAAuB,EAAvB,EAAA,IAAA,IAAA;CADF,QADF;QAFF;MADA;CAOA,EAAiB,CAAjB,CAAyB,IAAb;CACV,EAAS,GAAT,GAAS;CAAT,EACO,CAAP,EAAA,GAAO;CACC,CAAY,CAApB,CAAA,EAAA,CAAO,MAAP;MAX2B;CAA/B,EAA+B;;CA3Y/B,CA+ZA,CAAkB,CAAd,GAAc,CAAA,CAAC,GAAnB;CACE,EAAM,CAAN,CAAG,EAAiB,CAAjB,KAAH;CACE,EAAA,GAAA,EAAQ,CAAR;CACS,EAAT,EAAkB,CAAO,EAAjB,KAAR;MAFF;CAIE,EAAA,GAAA,EAAQ,CAAR;CACS,EAAT,KAAQ,KAAR;MANc;CAAlB,EAAkB,GAAlB,EAOgB,CAPhB;;CA/ZA,CAyaA,CAAc,CAAA,GAAd;;CAzaA,CA0aA,KAAO,CAAP;CACE,CAAM,EAAN,YAAA;CAAA,CACW,CAAyB,CAApC,GAAkB,EAAlB,KAAW;CADX,CAEU,CAAA,CAAV,CAAU,GAAV,CAAW;CACT,SAAA,MAAA;CAAA,EAAO,CAAP,CAAY,CAAZ;CACA,GAAG,CAAK,CAAR;CACE,CAA0C,CAAnC,CAAP,CAAmC,CAAnB,EAAhB;CAAA,EACO,CAAP,IAAA,IAAO;CACP,GAAG,IAAH;CACE,EAAU,CAAP,GAAc,EAAjB,CAAA;CAAA;CACuB,EAAR,CAAP,EADR,CACsB,KADtB,EAAA;CAEK,CAAD,CAAqC,CAAzB,EAAd,GAAwC,OAA9B,GAAV;CACqB,EAAR,CAAP,EAHR,CAGsB,EAHtB,GAAA;CAIO,EAAQ,CAAT,CAAJ,cAAA;YALJ;UAHF;MAAA,EAAA;CAUU,EAAR,IAAO,QAAP,gBAAA;QAZM;CAFV,IAEU;CA7aZ,GA0aA;;CA1aA,CA2bA,CAAY,MAAA,EAAZ;CACE,OAAA,iBAAA;AAAA,CAAA;UAAA,oCAAA;wBAAA;CACE,GAAG,CAAH,CAAA;CACE,EAAa,CAAT,CAAJ;MADF,EAAA;CAGE,EAAA,CAAa,GAAN,CAAP;CAAA,GACI,GAAQ;QALhB;CAAA;qBADU;CAAZ,CAOE,CAPU,GAAZ;;CA3bA,CAqcA,CAAgB,GAAA,GAAC,IAAjB;CACE,OAAA,8BAAA;CAAA,EAAQ,CAAR,CAAA;CAAA,CACwB,CAAM,CAA9B,CAAoC,CAApC,CAAwB,OAAxB;CACA;CAAA;UAAA,mCAAA;uBAAA;CACE,CAAuB,EAAvB,EAAA,QAAA;CADF;qBAHc;CArchB,EAqcgB;;CArchB,CA2cA,CAAuB,GAAA,GAAC,WAAxB;CACE,GAAA;CAAc,CAAQ,CAAgC,CAA3B,CAAA,CAA3B,OAAA;MADqB;CA3cvB,EA2cuB;;CA3cvB,CA8cA,CAAO,CAAP;;CA9cA,CA+cA,KAAA;CACE,CAAK,CAAL,CAAA,0BAAA;CAAA,CACM,EAAN;EACE,CAAA,CAHJ,CAGI,GAAA,CAAC;CACD,EAAO,CAAP;CACQ,EAAR,CAAyB,EAAZ,CAAN,EAAM,EAAb;CALJ,EAGI;;CAldJ,CAsdA,CAAiC,CAAA,CAAjC,CAAiC,GAAC,EAAlC,CAAA;CACuB,KAArB,KAAA,SAAA;CADF,EAAiC;;CAtdjC,CAydA,CAA2B,CAAA,CAA3B,CAAA,GAA4B,EAA5B;CACE,EAAG,CAAH,CAAuB,CAAvB;CACuB,KAArB,OAAA,OAAA;MAFuB;CAA3B,EAA2B;;CAI3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA7d
A;CAAA"
"mappings": ";AACA;CAAA,KAAA,i
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
A;CAAA"
}
}
\ No newline at end of file
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