Commit 3d50831e authored by mercury233's avatar mercury233

comments

parent fd351221
#标准库 # 标准库
net = require 'net' net = require 'net'
http = require 'http' http = require 'http'
url = require 'url' url = require 'url'
...@@ -10,7 +10,7 @@ execFile = require('child_process').execFile ...@@ -10,7 +10,7 @@ execFile = require('child_process').execFile
spawn = require('child_process').spawn spawn = require('child_process').spawn
spawnSync = require('child_process').spawnSync spawnSync = require('child_process').spawnSync
#三方库 # 三方库
_ = require 'underscore' _ = require 'underscore'
_.str = require 'underscore.string' _.str = require 'underscore.string'
_.mixin(_.str.exports()) _.mixin(_.str.exports())
...@@ -41,13 +41,16 @@ moment.locale('zh-cn', { ...@@ -41,13 +41,16 @@ moment.locale('zh-cn', {
#heapdump = require 'heapdump' #heapdump = require 'heapdump'
#配置 # 配置
# use nconf to save user config.user.json .
# config.json shouldn't be changed
nconf = require 'nconf' nconf = require 'nconf'
nconf.file('./config.user.json') nconf.file('./config.user.json')
defaultconfig = require('./config.json') defaultconfig = require('./config.json')
nconf.defaults(defaultconfig) nconf.defaults(defaultconfig)
settings = global.settings = nconf.get() settings = global.settings = nconf.get()
nconf.myset = (settings, path, val) -> nconf.myset = (settings, path, val) ->
# path should be like "modules:welcome"
nconf.set(path, val) nconf.set(path, val)
nconf.save() nconf.save()
log.info("setting changed", path, val) if _.isString(val) log.info("setting changed", path, val) if _.isString(val)
...@@ -63,6 +66,7 @@ nconf.myset = (settings, path, val) -> ...@@ -63,6 +66,7 @@ nconf.myset = (settings, path, val) ->
target[key] = val target[key] = val
return return
# ban a user manually and permanently
ban_user = (name) -> ban_user = (name) ->
settings.ban.banned_user.push(name) settings.ban.banned_user.push(name)
nconf.myset(settings, "ban:banned_user", settings.ban.banned_user) nconf.myset(settings, "ban:banned_user", settings.ban.banned_user)
...@@ -76,6 +80,7 @@ ban_user = (name) -> ...@@ -76,6 +80,7 @@ ban_user = (name) ->
return return
settings.version = parseInt(fs.readFileSync('ygopro/gframe/game.cpp', 'utf8').match(/PRO_VERSION = ([x\dABCDEF]+)/)[1], '16') settings.version = parseInt(fs.readFileSync('ygopro/gframe/game.cpp', 'utf8').match(/PRO_VERSION = ([x\dABCDEF]+)/)[1], '16')
# load the lflist of current date
settings.lflist = (for list in fs.readFileSync('ygopro/lflist.conf', 'utf8').match(/!.*/g) settings.lflist = (for list in fs.readFileSync('ygopro/lflist.conf', 'utf8').match(/!.*/g)
date=list.match(/!([\d\.]+)/) date=list.match(/!([\d\.]+)/)
continue unless date continue unless date
...@@ -89,14 +94,14 @@ if settings.modules.enable_cloud_replay ...@@ -89,14 +94,14 @@ if settings.modules.enable_cloud_replay
if settings.modules.enable_windbot if settings.modules.enable_windbot
settings.modules.windbots = require('./windbot/bots.json').windbots settings.modules.windbots = require('./windbot/bots.json').windbots
#组件 # 组件
ygopro = require './ygopro.js' ygopro = require './ygopro.js'
#Room = require './room.js'
roomlist = require './roomlist.js' if settings.modules.enable_websocket_roomlist roomlist = require './roomlist.js' if settings.modules.enable_websocket_roomlist
# cache users of mycard login
users_cache = {} users_cache = {}
#获取可用内存 # 获取可用内存
get_memory_usage = ()-> get_memory_usage = ()->
prc_free = spawnSync("free", []) prc_free = spawnSync("free", [])
if (prc_free.stdout) if (prc_free.stdout)
...@@ -112,7 +117,9 @@ get_memory_usage = ()-> ...@@ -112,7 +117,9 @@ get_memory_usage = ()->
percentUsed = 0 percentUsed = 0
return percentUsed return percentUsed
#定时清理关闭的连接 # 定时清理关闭的连接
# the server write data directly to the socket object
# so this is a dumb way to clean data
Graveyard = [] Graveyard = []
tribute = (socket) -> tribute = (socket) ->
...@@ -136,6 +143,7 @@ ROOM_all = [] ...@@ -136,6 +143,7 @@ ROOM_all = []
ROOM_players_oppentlist = {} ROOM_players_oppentlist = {}
ROOM_players_banned = [] ROOM_players_banned = []
# automatically ban user to use random duel
ROOM_ban_player = (name, ip, reason, countadd = 1)-> ROOM_ban_player = (name, ip, reason, countadd = 1)->
bannedplayer = _.find ROOM_players_banned, (bannedplayer)-> bannedplayer = _.find ROOM_players_banned, (bannedplayer)->
ip == bannedplayer.ip ip == bannedplayer.ip
...@@ -490,11 +498,11 @@ class Room ...@@ -490,11 +498,11 @@ class Room
if @random_type if @random_type
host_player = @get_host() host_player = @get_host()
if host_player && (host_player != client) if host_player && (host_player != client)
#进来时已经有人在等待了,互相记录为匹配过 # 进来时已经有人在等待了,互相记录为匹配过
ROOM_players_oppentlist[host_player.remoteAddress] = client.remoteAddress ROOM_players_oppentlist[host_player.remoteAddress] = client.remoteAddress
ROOM_players_oppentlist[client.remoteAddress] = host_player.remoteAddress ROOM_players_oppentlist[client.remoteAddress] = host_player.remoteAddress
else else
#第一个玩家刚进来,还没就位 # 第一个玩家刚进来,还没就位
ROOM_players_oppentlist[client.remoteAddress] = null ROOM_players_oppentlist[client.remoteAddress] = null
if @established if @established
...@@ -529,14 +537,15 @@ class Room ...@@ -529,14 +537,15 @@ class Room
return return
#网络连接 # 网络连接
net.createServer (client) -> net.createServer (client) ->
# server stand for the connection to ygopro server process
server = new net.Socket() server = new net.Socket()
client.server = server client.server = server
client.setTimeout(300000) #5分钟 client.setTimeout(300000) #5分钟
#释放处理 # 释放处理
client.on 'close', (had_error) -> client.on 'close', (had_error) ->
#log.info "client closed", client.name, had_error #log.info "client closed", client.name, had_error
room=ROOM_all[client.rid] room=ROOM_all[client.rid]
...@@ -602,8 +611,8 @@ net.createServer (client) -> ...@@ -602,8 +611,8 @@ net.createServer (client) ->
return return
return return
#需要重构 # 需要重构
#客户端到服务端(ctos)协议分析 # 客户端到服务端(ctos)协议分析
client.pre_establish_buffers = new Array() client.pre_establish_buffers = new Array()
...@@ -667,7 +676,7 @@ net.createServer (client) -> ...@@ -667,7 +676,7 @@ net.createServer (client) ->
return return
#服务端到客户端(stoc) # 服务端到客户端(stoc)
server.on 'data', (data)-> server.on 'data', (data)->
stoc_buffer = new Buffer(0) stoc_buffer = new Buffer(0)
stoc_message_length = 0 stoc_message_length = 0
...@@ -730,9 +739,12 @@ net.createServer (client) -> ...@@ -730,9 +739,12 @@ net.createServer (client) ->
log.info "server started", settings.port log.info "server started", settings.port
return return
#功能模块 # 功能模块
# return true to cancel a synchronous message
ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server)-> ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server)->
# checkmate use username$password, but here don't
# so remove the password
name = info.name.split("$")[0] name = info.name.split("$")[0]
struct = ygopro.structs["CTOS_PlayerInfo"] struct = ygopro.structs["CTOS_PlayerInfo"]
struct._setBuff(buffer) struct._setBuff(buffer)
...@@ -758,7 +770,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)-> ...@@ -758,7 +770,7 @@ ygopro.ctos_follow 'JOIN_GAME', false, (buffer, info, client, server)->
return return
return return
return return
#强行等待异步执行完毕_(:з」∠)_ # 强行等待异步执行完毕_(:з」∠)_
setTimeout (()-> setTimeout (()->
ygopro.stoc_send client, 'ERROR_MSG',{ ygopro.stoc_send client, 'ERROR_MSG',{
msg: 1 msg: 1
...@@ -1066,7 +1078,7 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server)-> ...@@ -1066,7 +1078,7 @@ ygopro.stoc_follow 'JOIN_GAME', false, (buffer, info, client, server)->
return return
return return
#登场台词 # 登场台词
load_dialogues = () -> load_dialogues = () ->
request request
url: settings.modules.dialogues url: settings.modules.dialogues
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment