Commit b42d4a5d authored by mercury233's avatar mercury233

Revert "full of bug" to get useable version

This reverts commit 42ae911a.
parent 42ae911a
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
"underscore": "*", "underscore": "*",
"underscore.string": "*", "underscore.string": "*",
"request": "*", "request": "*",
"bunyan": "*" "bunyan": "*",
}, },
"license": "GPLv3", "license": "GPLv3",
"main": "ygopro-server.js", "main": "ygopro-server.js",
......
...@@ -83,7 +83,7 @@ class Room ...@@ -83,7 +83,7 @@ class Room
@process = spawn './ygopro', param, cwd: 'ygocore' @process = spawn './ygopro', param, cwd: 'ygocore'
@process.on 'exit', (code)=> @process.on 'exit', (code)=>
#log.info 'room-exit', this.name, this.port, code #log.info 'room-exit', this.name, this.port, code
@process = null @disconnector = 'server' unless @disconnector
this.delete() this.delete()
@process.stdout.setEncoding('utf8') @process.stdout.setEncoding('utf8')
@process.stdout.once 'data', (data)=> @process.stdout.once 'data', (data)=>
...@@ -91,10 +91,7 @@ class Room ...@@ -91,10 +91,7 @@ class Room
@port = parseInt data @port = parseInt data
_.each @players, (player)=> _.each @players, (player)=>
player.server.connect @port, '127.0.0.1',=> player.server.connect @port, '127.0.0.1',=>
for buffer in player.pre_establish_buffers player.server.write buffer for buffer in player.pre_establish_buffers
player.buffer=buffer
buffer=null
player.server.write player.buffer
player.established = true player.established = true
delete: -> delete: ->
...@@ -110,10 +107,7 @@ class Room ...@@ -110,10 +107,7 @@ class Room
if @established if @established
client.server.connect @port, '127.0.0.1', -> client.server.connect @port, '127.0.0.1', ->
for buffer in client.pre_establish_buffers client.server.write buffer for buffer in client.pre_establish_buffers
client.buffer=buffer
buffer=null
client.server.write client.buffer
client.established = true client.established = true
disconnect: (client, error)-> disconnect: (client, error)->
...@@ -127,7 +121,7 @@ class Room ...@@ -127,7 +121,7 @@ class Room
if @players.length if @players.length
ygopro.stoc_send_chat_to_room this, "#{client.name} #{'离开了游戏'}#{if error then ": #{error}" else ''}" ygopro.stoc_send_chat_to_room this, "#{client.name} #{'离开了游戏'}#{if error then ": #{error}" else ''}"
else else
@process.kill() if @process @process.kill()
this.delete() this.delete()
module.exports = Room module.exports = Room
\ No newline at end of file
...@@ -99,7 +99,9 @@ ...@@ -99,7 +99,9 @@
}); });
this.process.on('exit', (function(_this) { this.process.on('exit', (function(_this) {
return function(code) { return function(code) {
_this.process = null; if (!_this.disconnector) {
_this.disconnector = 'server';
}
return _this["delete"](); return _this["delete"]();
}; };
})(this)); })(this));
...@@ -114,9 +116,7 @@ ...@@ -114,9 +116,7 @@
ref = player.pre_establish_buffers; ref = player.pre_establish_buffers;
for (i = 0, len = ref.length; i < len; i++) { for (i = 0, len = ref.length; i < len; i++) {
buffer = ref[i]; buffer = ref[i];
player.buffer = buffer; player.server.write(buffer);
buffer = null;
player.server.write(player.buffer);
} }
return player.established = true; return player.established = true;
}); });
...@@ -148,9 +148,7 @@ ...@@ -148,9 +148,7 @@
ref = client.pre_establish_buffers; ref = client.pre_establish_buffers;
for (i = 0, len = ref.length; i < len; i++) { for (i = 0, len = ref.length; i < len; i++) {
buffer = ref[i]; buffer = ref[i];
client.buffer = buffer; client.server.write(buffer);
buffer = null;
client.server.write(client.buffer);
} }
return client.established = true; return client.established = true;
}); });
...@@ -173,9 +171,7 @@ ...@@ -173,9 +171,7 @@
if (this.players.length) { if (this.players.length) {
return ygopro.stoc_send_chat_to_room(this, client.name + " " + '离开了游戏' + (error ? ": " + error : '')); return ygopro.stoc_send_chat_to_room(this, client.name + " " + '离开了游戏' + (error ? ": " + error : ''));
} else { } else {
if (this.process) {
this.process.kill(); this.process.kill();
}
return this["delete"](); return this["delete"]();
} }
} }
......
...@@ -27,8 +27,6 @@ settings = require './config.json' ...@@ -27,8 +27,6 @@ settings = require './config.json'
ygopro = require './ygopro.js' ygopro = require './ygopro.js'
Room = require './room.js' Room = require './room.js'
#连接池
sockets = []
#debug模式 端口号+1 #debug模式 端口号+1
debug = false debug = false
...@@ -44,147 +42,120 @@ else ...@@ -44,147 +42,120 @@ else
net.createServer (client) -> net.createServer (client) ->
server = new net.Socket() server = new net.Socket()
client.server = server client.server = server
sockets.push client
sockets.push server
client.setTimeout(200000) #释放处理
client.on 'close', (had_error) ->
client.bye = () -> log.info "client closed", client.name, had_error
unless !client || client.closed unless client.closed
client.closed = true client.closed = true
client.room.disconnect(client) if client.room client.room.disconnect(client) if client.room
sockets.splice(sockets.indexOf(client),1) server.end()
client.destroy()
client = null client.on 'error', (error)->
server.end() if server log.info "client error", client.name, error
unless client.closed
server.bye = () -> client.closed = error
unless !server || server.closed client.room.disconnect(client, error) if client.room
server.closed = true server.end()
sockets.splice(sockets.indexOf(server),1)
server.destroy() server.on 'close', (had_error) ->
server = null log.info "server closed", client.name, had_error
unless !client || client.closed server.closed = true unless server.closed
unless client.closed
ygopro.stoc_send_chat(client, "服务器关闭了连接") ygopro.stoc_send_chat(client, "服务器关闭了连接")
client.end() if client client.end()
#释放处理
client.on 'close', () ->
#log.info "client closed", client.name
client.bye() if client
client.on 'error', ()->
#log.info "client error", client.name
client.bye() if client
client.on 'end', ()->
#log.info "client end", client.name
client.bye() if client
client.on 'timeout', ()->
#log.info "client closed", client.name
client.bye() if client
server.on 'close', () ->
#log.info "server closed", client.name
server.bye() if server
server.on 'error', ()->
#log.info "server error", client.name
server.bye() if server
server.on 'end', ()->
#log.info "server end", client.name
server.bye() if server
server.on 'timeout', ()-> server.on 'error', (error)->
#log.info "server timeout", client.name log.info "server error", client.name, error
server.bye() if server server.closed = error
unless client.closed
ygopro.stoc_send_chat(client, "服务器错误: #{error}")
client.end()
#需要重构 #需要重构
#客户端到服务端(ctos)协议分析 #客户端到服务端(ctos)协议分析
client.ctos_buffer = new Buffer(0) ctos_buffer = new Buffer(0)
client.ctos_message_length = 0 ctos_message_length = 0
client.ctos_proto = 0 ctos_proto = 0
client.pre_establish_buffers = new Array() client.pre_establish_buffers = new Array()
client.on 'data', (data) -> client.on 'data', (data) ->
if client.is_post_watcher and client.room.watcher if client.is_post_watcher
client.room.watcher.write data client.room.watcher.write data
else else
client.ctos_buffer = Buffer.concat([client.ctos_buffer, data], client.ctos_buffer.length + data.length) #buffer的错误使用方式,好孩子不要学 ctos_buffer = Buffer.concat([ctos_buffer, data], ctos_buffer.length + data.length) #buffer的错误使用方式,好孩子不要学
if client.established if client.established
server.write(data) if server server.write data
else else
client.pre_establish_buffers.push data client.pre_establish_buffers.push data
while true while true
if client.ctos_message_length == 0 if ctos_message_length == 0
if client.ctos_buffer.length >= 2 if ctos_buffer.length >= 2
client.ctos_message_length = client.ctos_buffer.readUInt16LE(0) ctos_message_length = ctos_buffer.readUInt16LE(0)
else else
break break
else if client.ctos_proto == 0 else if ctos_proto == 0
if client.ctos_buffer.length >= 3 if ctos_buffer.length >= 3
client.ctos_proto = client.ctos_buffer.readUInt8(2) ctos_proto = ctos_buffer.readUInt8(2)
else else
break break
else else
if client.ctos_buffer.length >= 2 + client.ctos_message_length if ctos_buffer.length >= 2 + ctos_message_length
#console.log "CTOS", ygopro.constants.CTOS[client.ctos_proto] #console.log "CTOS", ygopro.constants.CTOS[ctos_proto]
if ygopro.ctos_follows[client.ctos_proto] if ygopro.ctos_follows[ctos_proto]
b = client.ctos_buffer.slice(3, client.ctos_message_length-1+3) b = ctos_buffer.slice(3, ctos_message_length-1+3)
if struct = ygopro.structs[ygopro.proto_structs.CTOS[ygopro.constants.CTOS[client.ctos_proto]]] if struct = ygopro.structs[ygopro.proto_structs.CTOS[ygopro.constants.CTOS[ctos_proto]]]
struct._setBuff(b) struct._setBuff(b)
ygopro.ctos_follows[client.ctos_proto].callback b, _.clone(struct.fields), client, server ygopro.ctos_follows[ctos_proto].callback b, _.clone(struct.fields), client, server
else else
ygopro.ctos_follows[client.ctos_proto].callback b, null, client, server ygopro.ctos_follows[ctos_proto].callback b, null, client, server
client.ctos_buffer = client.ctos_buffer.slice(2 + client.ctos_message_length) ctos_buffer = ctos_buffer.slice(2 + ctos_message_length)
client.ctos_message_length = 0 ctos_message_length = 0
client.ctos_proto = 0 ctos_proto = 0
else else
break break
#服务端到客户端(stoc) #服务端到客户端(stoc)
server.stoc_buffer = new Buffer(0) stoc_buffer = new Buffer(0)
server.stoc_message_length = 0 stoc_message_length = 0
server.stoc_proto = 0 stoc_proto = 0
server.on 'data', (data)-> server.on 'data', (data)->
server.stoc_buffer = Buffer.concat([server.stoc_buffer, data], server.stoc_buffer.length + data.length) #buffer的错误使用方式,好孩子不要学 stoc_buffer = Buffer.concat([stoc_buffer, data], stoc_buffer.length + data.length) #buffer的错误使用方式,好孩子不要学
#unless ygopro.stoc_follows[server.stoc_proto] and ygopro.stoc_follows[server.stoc_proto].synchronous #unless ygopro.stoc_follows[stoc_proto] and ygopro.stoc_follows[stoc_proto].synchronous
client.write data if client client.write data
while true while true
if server.stoc_message_length == 0 if stoc_message_length == 0
if server.stoc_buffer.length >= 2 if stoc_buffer.length >= 2
server.stoc_message_length = server.stoc_buffer.readUInt16LE(0) stoc_message_length = stoc_buffer.readUInt16LE(0)
else else
break break
else if server.stoc_proto == 0 else if stoc_proto == 0
if server.stoc_buffer.length >= 3 if stoc_buffer.length >= 3
server.stoc_proto = server.stoc_buffer.readUInt8(2) stoc_proto = stoc_buffer.readUInt8(2)
else else
break break
else else
if server.stoc_buffer.length >= 2 + server.stoc_message_length if stoc_buffer.length >= 2 + stoc_message_length
#console.log "STOC", ygopro.constants.STOC[server.stoc_proto] #console.log "STOC", ygopro.constants.STOC[stoc_proto]
stanzas = server.stoc_proto stanzas = stoc_proto
if ygopro.stoc_follows[server.stoc_proto] if ygopro.stoc_follows[stoc_proto]
b = server.stoc_buffer.slice(3, server.stoc_message_length - 1 + 3) b = stoc_buffer.slice(3, stoc_message_length - 1 + 3)
if struct = ygopro.structs[ygopro.proto_structs.STOC[ygopro.constants.STOC[server.stoc_proto]]] if struct = ygopro.structs[ygopro.proto_structs.STOC[ygopro.constants.STOC[stoc_proto]]]
struct._setBuff(b) struct._setBuff(b)
ygopro.stoc_follows[server.stoc_proto].callback b, _.clone(struct.fields), client, server ygopro.stoc_follows[stoc_proto].callback b, _.clone(struct.fields), client, server
else else
ygopro.stoc_follows[server.stoc_proto].callback b, null, client, server ygopro.stoc_follows[stoc_proto].callback b, null, client, server
server.stoc_buffer = server.stoc_buffer.slice(2 + server.stoc_message_length) stoc_buffer = stoc_buffer.slice(2 + stoc_message_length)
server.stoc_message_length = 0 stoc_message_length = 0
server.stoc_proto = 0 stoc_proto = 0
else else
break break
...@@ -318,7 +289,7 @@ ygopro.stoc_follow 'GAME_MSG', false, (buffer, info, client, server)-> ...@@ -318,7 +289,7 @@ ygopro.stoc_follow 'GAME_MSG', false, (buffer, info, client, server)->
client.lp = client.room.hostinfo.start_lp client.lp = client.room.hostinfo.start_lp
#ygopro.stoc_send_chat_to_room(client.room, "LP跟踪调试信息: #{client.name} 初始LP #{client.lp}") #ygopro.stoc_send_chat_to_room(client.room, "LP跟踪调试信息: #{client.name} 初始LP #{client.lp}")
if client and ygopro.constants.MSG[msg] == 'WIN' and _.startsWith(client.room.name, 'M#') and client.is_host if ygopro.constants.MSG[msg] == 'WIN' and _.startsWith(client.room.name, 'M#') and client.is_host
pos = buffer.readUInt8(1) pos = buffer.readUInt8(1)
pos = 1 - pos unless client.is_first or pos == 2 pos = 1 - pos unless client.is_first or pos == 2
reason = buffer.readUInt8(2) reason = buffer.readUInt8(2)
...@@ -397,7 +368,7 @@ if settings.modules.tips ...@@ -397,7 +368,7 @@ if settings.modules.tips
#log.info "tips loaded", tips.length #log.info "tips loaded", tips.length
ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server)-> ygopro.stoc_follow 'DUEL_START', false, (buffer, info, client, server)->
if client && !client.room.started #first start unless client.room.started #first start
client.room.started = true client.room.started = true
client.room.duels = [] client.room.duels = []
client.room.dueling_players = [] client.room.dueling_players = []
...@@ -427,12 +398,12 @@ ygopro.ctos_follow 'CHAT', false, (buffer, info, client, server)-> ...@@ -427,12 +398,12 @@ ygopro.ctos_follow 'CHAT', false, (buffer, info, client, server)->
else else
#log.warn 'ping', stdout #log.warn 'ping', stdout
ygopro.stoc_send_chat_to_room client.room, stdout ygopro.stoc_send_chat_to_room client.room, stdout
when '/count'
ygopro.stoc_send_chat(client,sockets.length.toString())
when '/help' when '/help'
ygopro.stoc_send_chat(client,"YGOSrv233 指令帮助") ygopro.stoc_send_chat(client,"YGOSrv233 指令帮助")
ygopro.stoc_send_chat(client,"/help 显示这个帮助信息") ygopro.stoc_send_chat(client,"/help 显示这个帮助信息")
ygopro.stoc_send_chat(client,"/tip 显示一条提示") if settings.modules.tips ygopro.stoc_send_chat(client,"/tip 显示一条提示") if settings.modules.tips
#ygopro.stoc_send_chat(client,"/senddeck 发送自己的卡组")
when '/tip' when '/tip'
ygopro.stoc_send_random_tip(client) if settings.modules.tips ygopro.stoc_send_random_tip(client) if settings.modules.tips
......
// Generated by CoffeeScript 1.9.3 // Generated by CoffeeScript 1.9.3
(function() { (function() {
var Room, _, bunyan, debug, dialogues, execFile, fs, http, http_server, log, net, os, path, request, settings, sockets, tips, url, ygopro; var Room, _, bunyan, debug, dialogues, execFile, fs, http, http_server, log, net, os, path, request, settings, tips, url, ygopro;
net = require('net'); net = require('net');
...@@ -32,8 +32,6 @@ ...@@ -32,8 +32,6 @@
Room = require('./room.js'); Room = require('./room.js');
sockets = [];
debug = false; debug = false;
log = null; log = null;
...@@ -53,125 +51,90 @@ ...@@ -53,125 +51,90 @@
} }
net.createServer(function(client) { net.createServer(function(client) {
var server; var ctos_buffer, ctos_message_length, ctos_proto, server, stoc_buffer, stoc_message_length, stoc_proto;
server = new net.Socket(); server = new net.Socket();
client.server = server; client.server = server;
sockets.push(client); client.on('close', function(had_error) {
sockets.push(server); log.info("client closed", client.name, had_error);
client.setTimeout(200000); if (!client.closed) {
client.bye = function() {
if (!(!client || client.closed)) {
client.closed = true; client.closed = true;
if (client.room) { if (client.room) {
client.room.disconnect(client); client.room.disconnect(client);
} }
sockets.splice(sockets.indexOf(client), 1);
client.destroy();
client = null;
} }
if (server) {
return server.end(); return server.end();
}
};
server.bye = function() {
if (!(!server || server.closed)) {
server.closed = true;
sockets.splice(sockets.indexOf(server), 1);
server.destroy();
server = null;
}
if (!(!client || client.closed)) {
ygopro.stoc_send_chat(client, "服务器关闭了连接");
if (client) {
return client.end();
}
}
};
client.on('close', function() {
if (client) {
return client.bye();
}
});
client.on('error', function() {
if (client) {
return client.bye();
}
}); });
client.on('end', function() { client.on('error', function(error) {
if (client) { log.info("client error", client.name, error);
return client.bye(); if (!client.closed) {
} client.closed = error;
}); if (client.room) {
client.on('timeout', function() { client.room.disconnect(client, error);
if (client) {
return client.bye();
} }
});
server.on('close', function() {
if (server) {
return server.bye();
} }
return server.end();
}); });
server.on('error', function() { server.on('close', function(had_error) {
if (server) { log.info("server closed", client.name, had_error);
return server.bye(); if (!server.closed) {
server.closed = true;
} }
}); if (!client.closed) {
server.on('end', function() { ygopro.stoc_send_chat(client, "服务器关闭了连接");
if (server) { return client.end();
return server.bye();
} }
}); });
server.on('timeout', function() { server.on('error', function(error) {
if (server) { log.info("server error", client.name, error);
return server.bye(); server.closed = error;
if (!client.closed) {
ygopro.stoc_send_chat(client, "服务器错误: " + error);
return client.end();
} }
}); });
client.ctos_buffer = new Buffer(0); ctos_buffer = new Buffer(0);
client.ctos_message_length = 0; ctos_message_length = 0;
client.ctos_proto = 0; ctos_proto = 0;
client.pre_establish_buffers = new Array(); client.pre_establish_buffers = new Array();
client.on('data', function(data) { client.on('data', function(data) {
var b, results, struct; var b, results, struct;
if (client.is_post_watcher && client.room.watcher) { if (client.is_post_watcher) {
return client.room.watcher.write(data); return client.room.watcher.write(data);
} else { } else {
client.ctos_buffer = Buffer.concat([client.ctos_buffer, data], client.ctos_buffer.length + data.length); ctos_buffer = Buffer.concat([ctos_buffer, data], ctos_buffer.length + data.length);
if (client.established) { if (client.established) {
if (server) {
server.write(data); server.write(data);
}
} else { } else {
client.pre_establish_buffers.push(data); client.pre_establish_buffers.push(data);
} }
results = []; results = [];
while (true) { while (true) {
if (client.ctos_message_length === 0) { if (ctos_message_length === 0) {
if (client.ctos_buffer.length >= 2) { if (ctos_buffer.length >= 2) {
results.push(client.ctos_message_length = client.ctos_buffer.readUInt16LE(0)); results.push(ctos_message_length = ctos_buffer.readUInt16LE(0));
} else { } else {
break; break;
} }
} else if (client.ctos_proto === 0) { } else if (ctos_proto === 0) {
if (client.ctos_buffer.length >= 3) { if (ctos_buffer.length >= 3) {
results.push(client.ctos_proto = client.ctos_buffer.readUInt8(2)); results.push(ctos_proto = ctos_buffer.readUInt8(2));
} else { } else {
break; break;
} }
} else { } else {
if (client.ctos_buffer.length >= 2 + client.ctos_message_length) { if (ctos_buffer.length >= 2 + ctos_message_length) {
if (ygopro.ctos_follows[client.ctos_proto]) { if (ygopro.ctos_follows[ctos_proto]) {
b = client.ctos_buffer.slice(3, client.ctos_message_length - 1 + 3); b = ctos_buffer.slice(3, ctos_message_length - 1 + 3);
if (struct = ygopro.structs[ygopro.proto_structs.CTOS[ygopro.constants.CTOS[client.ctos_proto]]]) { if (struct = ygopro.structs[ygopro.proto_structs.CTOS[ygopro.constants.CTOS[ctos_proto]]]) {
struct._setBuff(b); struct._setBuff(b);
ygopro.ctos_follows[client.ctos_proto].callback(b, _.clone(struct.fields), client, server); ygopro.ctos_follows[ctos_proto].callback(b, _.clone(struct.fields), client, server);
} else { } else {
ygopro.ctos_follows[client.ctos_proto].callback(b, null, client, server); ygopro.ctos_follows[ctos_proto].callback(b, null, client, server);
} }
} }
client.ctos_buffer = client.ctos_buffer.slice(2 + client.ctos_message_length); ctos_buffer = ctos_buffer.slice(2 + ctos_message_length);
client.ctos_message_length = 0; ctos_message_length = 0;
results.push(client.ctos_proto = 0); results.push(ctos_proto = 0);
} else { } else {
break; break;
} }
...@@ -180,44 +143,42 @@ ...@@ -180,44 +143,42 @@
return results; return results;
} }
}); });
server.stoc_buffer = new Buffer(0); stoc_buffer = new Buffer(0);
server.stoc_message_length = 0; stoc_message_length = 0;
server.stoc_proto = 0; stoc_proto = 0;
return server.on('data', function(data) { return server.on('data', function(data) {
var b, results, stanzas, struct; var b, results, stanzas, struct;
server.stoc_buffer = Buffer.concat([server.stoc_buffer, data], server.stoc_buffer.length + data.length); stoc_buffer = Buffer.concat([stoc_buffer, data], stoc_buffer.length + data.length);
if (client) {
client.write(data); client.write(data);
}
results = []; results = [];
while (true) { while (true) {
if (server.stoc_message_length === 0) { if (stoc_message_length === 0) {
if (server.stoc_buffer.length >= 2) { if (stoc_buffer.length >= 2) {
results.push(server.stoc_message_length = server.stoc_buffer.readUInt16LE(0)); results.push(stoc_message_length = stoc_buffer.readUInt16LE(0));
} else { } else {
break; break;
} }
} else if (server.stoc_proto === 0) { } else if (stoc_proto === 0) {
if (server.stoc_buffer.length >= 3) { if (stoc_buffer.length >= 3) {
results.push(server.stoc_proto = server.stoc_buffer.readUInt8(2)); results.push(stoc_proto = stoc_buffer.readUInt8(2));
} else { } else {
break; break;
} }
} else { } else {
if (server.stoc_buffer.length >= 2 + server.stoc_message_length) { if (stoc_buffer.length >= 2 + stoc_message_length) {
stanzas = server.stoc_proto; stanzas = stoc_proto;
if (ygopro.stoc_follows[server.stoc_proto]) { if (ygopro.stoc_follows[stoc_proto]) {
b = server.stoc_buffer.slice(3, server.stoc_message_length - 1 + 3); b = stoc_buffer.slice(3, stoc_message_length - 1 + 3);
if (struct = ygopro.structs[ygopro.proto_structs.STOC[ygopro.constants.STOC[server.stoc_proto]]]) { if (struct = ygopro.structs[ygopro.proto_structs.STOC[ygopro.constants.STOC[stoc_proto]]]) {
struct._setBuff(b); struct._setBuff(b);
ygopro.stoc_follows[server.stoc_proto].callback(b, _.clone(struct.fields), client, server); ygopro.stoc_follows[stoc_proto].callback(b, _.clone(struct.fields), client, server);
} else { } else {
ygopro.stoc_follows[server.stoc_proto].callback(b, null, client, server); ygopro.stoc_follows[stoc_proto].callback(b, null, client, server);
} }
} }
server.stoc_buffer = server.stoc_buffer.slice(2 + server.stoc_message_length); stoc_buffer = stoc_buffer.slice(2 + stoc_message_length);
server.stoc_message_length = 0; stoc_message_length = 0;
results.push(server.stoc_proto = 0); results.push(stoc_proto = 0);
} else { } else {
break; break;
} }
...@@ -364,7 +325,7 @@ ...@@ -364,7 +325,7 @@
client.is_first = !(playertype & 0xf); client.is_first = !(playertype & 0xf);
client.lp = client.room.hostinfo.start_lp; client.lp = client.room.hostinfo.start_lp;
} }
if (client && ygopro.constants.MSG[msg] === 'WIN' && _.startsWith(client.room.name, 'M#') && client.is_host) { if (ygopro.constants.MSG[msg] === 'WIN' && _.startsWith(client.room.name, 'M#') && client.is_host) {
pos = buffer.readUInt8(1); pos = buffer.readUInt8(1);
if (!(client.is_first || pos === 2)) { if (!(client.is_first || pos === 2)) {
pos = 1 - pos; pos = 1 - pos;
...@@ -456,7 +417,7 @@ ...@@ -456,7 +417,7 @@
ygopro.stoc_follow('DUEL_START', false, function(buffer, info, client, server) { ygopro.stoc_follow('DUEL_START', false, function(buffer, info, client, server) {
var j, len, player, ref; var j, len, player, ref;
if (client && !client.room.started) { if (!client.room.started) {
client.room.started = true; client.room.started = true;
client.room.duels = []; client.room.duels = [];
client.room.dueling_players = []; client.room.dueling_players = [];
...@@ -489,8 +450,6 @@ ...@@ -489,8 +450,6 @@
} }
} }
}); });
case '/count':
return ygopro.stoc_send_chat(client, sockets.length.toString());
case '/help': case '/help':
ygopro.stoc_send_chat(client, "YGOSrv233 指令帮助"); ygopro.stoc_send_chat(client, "YGOSrv233 指令帮助");
ygopro.stoc_send_chat(client, "/help 显示这个帮助信息"); ygopro.stoc_send_chat(client, "/help 显示这个帮助信息");
......
...@@ -76,7 +76,6 @@ for name, declaration of structs_declaration ...@@ -76,7 +76,6 @@ for name, declaration of structs_declaration
header = new Buffer(3) header = new Buffer(3)
header.writeUInt16LE buffer.length + 1, 0 header.writeUInt16LE buffer.length + 1, 0
header.writeUInt8 proto, 2 header.writeUInt8 proto, 2
if socket
socket.write header socket.write header
socket.write buffer if buffer.length socket.write buffer if buffer.length
...@@ -102,7 +101,6 @@ for name, declaration of structs_declaration ...@@ -102,7 +101,6 @@ for name, declaration of structs_declaration
header = new Buffer(3) header = new Buffer(3)
header.writeUInt16LE buffer.length + 1, 0 header.writeUInt16LE buffer.length + 1, 0
header.writeUInt8 proto, 2 header.writeUInt8 proto, 2
if socket
socket.write header socket.write header
socket.write buffer if buffer.length socket.write buffer if buffer.length
......
...@@ -126,12 +126,10 @@ ...@@ -126,12 +126,10 @@
header = new Buffer(3); header = new Buffer(3);
header.writeUInt16LE(buffer.length + 1, 0); header.writeUInt16LE(buffer.length + 1, 0);
header.writeUInt8(proto, 2); header.writeUInt8(proto, 2);
if (socket) {
socket.write(header); socket.write(header);
if (buffer.length) { if (buffer.length) {
return socket.write(buffer); return socket.write(buffer);
} }
}
}; };
this.ctos_send = function(socket, proto, info) { this.ctos_send = function(socket, proto, info) {
...@@ -162,12 +160,10 @@ ...@@ -162,12 +160,10 @@
header = new Buffer(3); header = new Buffer(3);
header.writeUInt16LE(buffer.length + 1, 0); header.writeUInt16LE(buffer.length + 1, 0);
header.writeUInt8(proto, 2); header.writeUInt8(proto, 2);
if (socket) {
socket.write(header); socket.write(header);
if (buffer.length) { if (buffer.length) {
return socket.write(buffer); return socket.write(buffer);
} }
}
}; };
this.stoc_send_chat = function(client, msg, player) { this.stoc_send_chat = function(client, msg, player) {
......
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