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
91aa5d1b
Commit
91aa5d1b
authored
Mar 24, 2016
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge
https://github.com/mycard/ygopro-server
into lite
parents
b687d05e
a956cba1
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
129 additions
and
37 deletions
+129
-37
Dockerfile
Dockerfile
+9
-1
config.json
config.json
+33
-27
room.coffee
room.coffee
+12
-2
room.js
room.js
+16
-2
ygopro-server.coffee
ygopro-server.coffee
+27
-2
ygopro-server.js
ygopro-server.js
+32
-3
No files found.
Dockerfile
View file @
91aa5d1b
FROM
node
RUN
apt-get update
RUN
apt-get
install
-y
git build-essential premake4 libfreetype6-dev libevent-dev libsqlite3-dev liblua5.2-dev
libglu-dev libirrlicht-dev
RUN
apt-get
install
-y
git build-essential premake4 libfreetype6-dev libevent-dev libsqlite3-dev liblua5.2-dev
mono-complete
RUN
mkdir
-p
/usr/src/app
WORKDIR
/usr/src/app
...
...
@@ -16,5 +16,13 @@ RUN make config=release ygopro
WORKDIR
/usr/src/app/ygopro
RUN
ln
-s
bin/release/ygopro ygopro
RUN
strip ygopro
RUN
mv
/usr/src/app/windbot /usr/src/app/windbot-source
WORKDIR
/usr/src/app/windbot-source
RUN
xbuild /property:Configuration
=
Release /property:OutDir
=
/usr/src/app/windbot/
WORKDIR
/usr/src/app
RUN
rm
-rf
/usr/src/app/windbot-source
RUN
ln
-s
/usr/src/app/ygopro/cards.cdb /usr/src/app/windbot/cards.cdb
WORKDIR
/usr/src/app
CMD
[ "npm", "start" ]
config.json
View file @
91aa5d1b
{
"port"
:
7911
,
"ygopro_path"
:
"ygopro"
,
"modules"
:
{
"welcome"
:
"YGOPRO Server"
,
"update"
:
"请更新游戏版本"
,
"stop"
:
false
,
"tips"
:
"http://mycard.moe/ygopro/tips.json"
,
"dialogues"
:
"http://mycard.moe/ygopro/dialogues.json"
,
"redis_port"
:
6379
,
"enable_websocket_roomlist"
:
false
,
"enable_random_duel"
:
false
,
"mycard_auth"
:
false
,
"post_start_watching"
:
true
,
"TCG_banlist_id"
:
8
,
"enable_TCG_as_default"
:
false
,
"http"
:
{
"port"
:
7922
,
"password"
:
"123456"
,
"ssl"
:
{
"enabled"
:
false
,
"port"
:
7923
,
"cert"
:
"ssl/ygopro-server.crt"
,
"key"
:
"ssl/ygopro-server.key"
}
}
}
"port"
:
7911
,
"ygopro_path"
:
"ygopro"
,
"modules"
:
{
"welcome"
:
"YGOPRO Server"
,
"update"
:
"请更新游戏版本"
,
"stop"
:
false
,
"tips"
:
"http://mycard.moe/ygopro/tips.json"
,
"dialogues"
:
"http://mycard.moe/ygopro/dialogues.json"
,
"redis_port"
:
6379
,
"enable_websocket_roomlist"
:
false
,
"enable_random_duel"
:
false
,
"mycard_auth"
:
false
,
"post_start_watching"
:
true
,
"TCG_banlist_id"
:
8
,
"enable_TCG_as_default"
:
false
,
"http"
:
{
"port"
:
7922
,
"password"
:
"123456"
,
"ssl"
:
{
"enabled"
:
false
,
"port"
:
7923
,
"cert"
:
"ssl/ygopro-server.crt"
,
"key"
:
"ssl/ygopro-server.key"
}
},
"windbot"
:
[
{
"name"
:
"啪啪尼"
,
"deck"
:
"Dragunity"
,
"dialog"
:
"zh-CN"
}
]
}
}
room.coffee
View file @
91aa5d1b
...
...
@@ -3,6 +3,7 @@ _.str = require 'underscore.string'
_
.
mixin
(
_
.
str
.
exports
());
spawn
=
require
(
'child_process'
).
spawn
spawnSync
=
require
(
'child_process'
).
spawnSync
settings
=
require
'./config.json'
ygopro
=
require
'./ygopro.js'
roomlist
=
require
'./roomlist'
if
settings
.
modules
.
enable_websocket_roomlist
bunyan
=
require
'bunyan'
...
...
@@ -23,7 +24,6 @@ moment.locale('zh-cn', { relativeTime : {
y
:
'1年'
,
yy
:
'%d年'
}})
settings
=
require
'./config.json'
log
=
bunyan
.
createLogger
name
:
"mycard-room"
#redisdb = redis.createClient host: "127.0.0.1", port: settings.modules.redis_port
...
...
@@ -318,6 +318,16 @@ class Room
player
.
pre_establish_buffers
=
[]
return
return
console
.
log
@
windbot
if
@
windbot
spawn
'mono'
,
[
'WindBot.exe'
],
{
cwd
:
'windbot'
,
env
:
{
YGOPRO_VERSION
:
settings
.
version
YGOPRO_HOST
:
'127.0.0.1'
YGOPRO_PORT
:
@
port
YGOPRO_NAME
:
@
windbot
.
name
YGOPRO_DECK
:
@
windbot
.
deck
YGOPRO_DIALOG
:
@
windbot
.
dialog
}}
return
catch
@
error
=
"建立房间失败,请重试"
...
...
@@ -413,4 +423,4 @@ class Room
this
.
delete
()
return
module
.
exports
=
Room
\ No newline at end of file
module
.
exports
=
Room
room.js
View file @
91aa5d1b
...
...
@@ -12,6 +12,8 @@
spawnSync
=
require
(
'
child_process
'
).
spawnSync
;
settings
=
require
(
'
./config.json
'
);
ygopro
=
require
(
'
./ygopro.js
'
);
if
(
settings
.
modules
.
enable_websocket_roomlist
)
{
...
...
@@ -40,8 +42,6 @@
}
});
settings
=
require
(
'
./config.json
'
);
log
=
bunyan
.
createLogger
({
name
:
"
mycard-room
"
});
...
...
@@ -412,6 +412,20 @@
player
.
pre_establish_buffers
=
[];
});
});
console
.
log
(
_this
.
windbot
);
if
(
_this
.
windbot
)
{
spawn
(
'
mono
'
,
[
'
WindBot.exe
'
],
{
cwd
:
'
windbot
'
,
env
:
{
YGOPRO_VERSION
:
settings
.
version
,
YGOPRO_HOST
:
'
127.0.0.1
'
,
YGOPRO_PORT
:
_this
.
port
,
YGOPRO_NAME
:
_this
.
windbot
.
name
,
YGOPRO_DECK
:
_this
.
windbot
.
deck
,
YGOPRO_DIALOG
:
_this
.
windbot
.
dialog
}
});
}
};
})(
this
));
}
catch
(
error1
)
{
...
...
ygopro-server.coffee
View file @
91aa5d1b
...
...
@@ -320,6 +320,29 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
}
client
.
end
()
else
if
settings
.
modules
.
windbot
and
info
.
pass
[
0
...
2
]
==
'AI'
if
info
.
pass
.
length
>
3
and
info
.
pass
[
0
...
3
]
==
'AI#'
name
=
info
.
pass
.
slice
(
3
)
windbot
=
_
.
sample
_
.
filter
settings
.
modules
.
windbot
,
(
w
)
->
w
.
name
==
name
or
w
.
deck
==
name
if
!
windbot
ygopro
.
stoc_send_chat
(
client
,
'主机密码不正确 (Invalid Windbot Name)'
,
11
)
ygopro
.
stoc_send
client
,
'ERROR_MSG'
,{
msg
:
1
code
:
2
}
client
.
end
()
return
else
windbot
=
_
.
sample
settings
.
modules
.
windbot
room
=
Room
.
find_or_create_by_name
(
'AI#'
+
Math
.
random
().
toString
())
# 这个 AI# 没有特殊作用, 仅作为标记
room
.
windbot
=
windbot
room
.
private
=
true
client
.
room
=
room
client
.
room
.
connect
(
client
)
else
if
info
.
pass
.
length
and
settings
.
modules
.
mycard_auth
ygopro
.
stoc_send_chat
(
client
,
'正在读取用户信息...'
,
11
)
if
info
.
pass
.
length
<=
8
...
...
@@ -719,9 +742,9 @@ if settings.modules.tips
if
settings
.
modules
.
mycard_auth
and
process
.
env
.
MYCARD_AUTH_DATABASE
pg
=
require
(
'pg'
);
pg
.
connect
process
.
env
.
MYCARD_AUTH_DATABASE
,
(
error
,
client
,
done
)
->
if
(
error
)
return
console
.
error
(
'error fetching client from pool'
,
err
);
throw
error
if
error
client
.
query
'SELECT username, id from users'
,
(
error
,
result
)
->
throw
error
if
error
done
();
for
row
in
result
.
rows
users_cache
[
row
.
username
]
=
row
.
id
...
...
@@ -737,6 +760,8 @@ ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server)->
for
player
in
client
.
room
.
players
when
player
.
pos
!=
7
client
.
room
.
dueling_players
[
player
.
pos
]
=
player
client
.
room
.
player_datas
.
push
ip
:
player
.
remoteAddress
,
name
:
player
.
name
if
client
.
room
.
windbot
client
.
room
.
dueling_players
[
1
-
player
.
pos
]
=
{}
if
settings
.
modules
.
tips
ygopro
.
stoc_send_random_tip
(
client
)
return
...
...
ygopro-server.js
View file @
91aa5d1b
...
...
@@ -293,7 +293,7 @@
});
ygopro
.
ctos_follow
(
'
JOIN_GAME
'
,
false
,
function
(
buffer
,
info
,
client
,
server
)
{
var
check
,
decrypted_buffer
,
finish
,
i
,
id
,
k
,
l
,
len
,
len1
,
ref
,
ref1
,
room
,
secre
t
;
var
check
,
decrypted_buffer
,
finish
,
i
,
id
,
k
,
l
,
len
,
len1
,
name
,
ref
,
ref1
,
room
,
secret
,
windbo
t
;
if
(
settings
.
modules
.
stop
)
{
ygopro
.
stoc_send_chat
(
client
,
settings
.
modules
.
stop
,
11
);
ygopro
.
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
...
...
@@ -350,6 +350,29 @@
code
:
2
});
client
.
end
();
}
else
if
(
settings
.
modules
.
windbot
&&
info
.
pass
.
slice
(
0
,
2
)
===
'
AI
'
)
{
if
(
info
.
pass
.
length
>
3
&&
info
.
pass
.
slice
(
0
,
3
)
===
'
AI#
'
)
{
name
=
info
.
pass
.
slice
(
3
);
windbot
=
_
.
sample
(
_
.
filter
(
settings
.
modules
.
windbot
,
function
(
w
)
{
return
w
.
name
===
name
||
w
.
deck
===
name
;
}));
if
(
!
windbot
)
{
ygopro
.
stoc_send_chat
(
client
,
'
主机密码不正确 (Invalid Windbot Name)
'
,
11
);
ygopro
.
stoc_send
(
client
,
'
ERROR_MSG
'
,
{
msg
:
1
,
code
:
2
});
client
.
end
();
return
;
}
}
else
{
windbot
=
_
.
sample
(
settings
.
modules
.
windbot
);
}
room
=
Room
.
find_or_create_by_name
(
'
AI#
'
+
Math
.
random
().
toString
());
room
.
windbot
=
windbot
;
room
[
"
private
"
]
=
true
;
client
.
room
=
room
;
client
.
room
.
connect
(
client
);
}
else
if
(
info
.
pass
.
length
&&
settings
.
modules
.
mycard_auth
)
{
ygopro
.
stoc_send_chat
(
client
,
'
正在读取用户信息...
'
,
11
);
if
(
info
.
pass
.
length
<=
8
)
{
...
...
@@ -380,7 +403,7 @@
return
(
checksum
&
0xFF
)
===
0
;
};
finish
=
function
(
buffer
)
{
var
action
,
name
,
opt1
,
opt2
,
opt3
,
options
,
room
;
var
action
,
opt1
,
opt2
,
opt3
,
options
;
action
=
buffer
.
readUInt8
(
1
)
>>
4
;
if
(
buffer
!==
decrypted_buffer
&&
(
action
===
1
||
action
===
2
||
action
===
4
))
{
ygopro
.
stoc_send_chat
(
client
,
'
主机密码不正确 (Unauthorized)
'
,
11
);
...
...
@@ -816,10 +839,13 @@
pg
=
require
(
'
pg
'
);
pg
.
connect
(
process
.
env
.
MYCARD_AUTH_DATABASE
,
function
(
error
,
client
,
done
)
{
if
(
error
)
{
return
console
.
error
(
'
error fetching client from pool
'
,
err
)
;
throw
error
;
}
return
client
.
query
(
'
SELECT username, id from users
'
,
function
(
error
,
result
)
{
var
k
,
len
,
ref
,
row
;
if
(
error
)
{
throw
error
;
}
done
();
ref
=
result
.
rows
;
for
(
k
=
0
,
len
=
ref
.
length
;
k
<
len
;
k
++
)
{
...
...
@@ -853,6 +879,9 @@
ip
:
player
.
remoteAddress
,
name
:
player
.
name
});
if
(
client
.
room
.
windbot
)
{
client
.
room
.
dueling_players
[
1
-
player
.
pos
]
=
{};
}
}
}
if
(
settings
.
modules
.
tips
)
{
...
...
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