Commit a180954a authored by nanahira's avatar nanahira

finish rep chat feature

parent c9102370
...@@ -991,7 +991,7 @@ CLIENT_is_able_to_reconnect = global.CLIENT_is_able_to_reconnect = (client, deck ...@@ -991,7 +991,7 @@ CLIENT_is_able_to_reconnect = global.CLIENT_is_able_to_reconnect = (client, deck
CLIENT_get_kick_reconnect_target = global.CLIENT_get_kick_reconnect_target = (client, deckbuf) -> CLIENT_get_kick_reconnect_target = global.CLIENT_get_kick_reconnect_target = (client, deckbuf) ->
for room in ROOM_all when room and room.duel_stage != ygopro.constants.DUEL_STAGE.BEGIN and !room.windbot for room in ROOM_all when room and room.duel_stage != ygopro.constants.DUEL_STAGE.BEGIN and !room.windbot
for player in room.get_playing_player() when !player.closed and player.name == client.name and (settings.modules.challonge.enabled or player.pass == client.pass) and (settings.modules.mycard.enabled or settings.modules.tournament_mode.enabled or player.ip == client.ip or (client.vpass and client.vpass == player.vpass)) and (!deckbuf or deckbuf.compare(player.start_deckbuf) == 0) for player in room.get_playing_player() when !player.isClosed and player.name == client.name and (settings.modules.challonge.enabled or player.pass == client.pass) and (settings.modules.mycard.enabled or settings.modules.tournament_mode.enabled or player.ip == client.ip or (client.vpass and client.vpass == player.vpass)) and (!deckbuf or deckbuf.compare(player.start_deckbuf) == 0)
return player return player
return null return null
...@@ -1124,7 +1124,7 @@ CLIENT_heartbeat_unregister = global.CLIENT_heartbeat_unregister = (client) -> ...@@ -1124,7 +1124,7 @@ CLIENT_heartbeat_unregister = global.CLIENT_heartbeat_unregister = (client) ->
return true return true
CLIENT_heartbeat_register = global.CLIENT_heartbeat_register = (client, send) -> CLIENT_heartbeat_register = global.CLIENT_heartbeat_register = (client, send) ->
if !settings.modules.heartbeat_detection.enabled or client.closed or client.is_post_watcher or client.pre_reconnecting or client.reconnecting or client.waiting_for_last or client.pos > 3 or client.heartbeat_protected if !settings.modules.heartbeat_detection.enabled or client.isClosed or client.is_post_watcher or client.pre_reconnecting or client.reconnecting or client.waiting_for_last or client.pos > 3 or client.heartbeat_protected
return false return false
if client.heartbeat_timeout if client.heartbeat_timeout
CLIENT_heartbeat_unregister(client) CLIENT_heartbeat_unregister(client)
...@@ -1140,7 +1140,7 @@ CLIENT_heartbeat_register = global.CLIENT_heartbeat_register = (client, send) -> ...@@ -1140,7 +1140,7 @@ CLIENT_heartbeat_register = global.CLIENT_heartbeat_register = (client, send) ->
}) })
client.heartbeat_timeout = setTimeout(() -> client.heartbeat_timeout = setTimeout(() ->
CLIENT_heartbeat_unregister(client) CLIENT_heartbeat_unregister(client)
client.destroy() unless client.closed or client.heartbeat_responsed client.destroy() unless client.isClosed or client.heartbeat_responsed
return return
, settings.modules.heartbeat_detection.wait_time) , settings.modules.heartbeat_detection.wait_time)
#log.info(1, client.name) #log.info(1, client.name)
...@@ -1150,7 +1150,7 @@ CLIENT_is_banned_by_mc = global.CLIENT_is_banned_by_mc = (client) -> ...@@ -1150,7 +1150,7 @@ CLIENT_is_banned_by_mc = global.CLIENT_is_banned_by_mc = (client) ->
return client.ban_mc and client.ban_mc.banned and moment_now.isBefore(client.ban_mc.until) return client.ban_mc and client.ban_mc.banned and moment_now.isBefore(client.ban_mc.until)
CLIENT_send_replays = global.CLIENT_send_replays = (client, room) -> CLIENT_send_replays = global.CLIENT_send_replays = (client, room) ->
return false unless settings.modules.replay_delay and not (settings.modules.tournament_mode.enabled and settings.modules.tournament_mode.block_replay_to_player) and room.replays.length and room.hostinfo.mode == 1 and !client.replays_sent and !client.closed return false unless settings.modules.replay_delay and not (settings.modules.tournament_mode.enabled and settings.modules.tournament_mode.block_replay_to_player) and room.replays.length and room.hostinfo.mode == 1 and !client.replays_sent and !client.isClosed
client.replays_sent = true client.replays_sent = true
i = 0 i = 0
for buffer in room.replays for buffer in room.replays
...@@ -1161,7 +1161,7 @@ CLIENT_send_replays = global.CLIENT_send_replays = (client, room) -> ...@@ -1161,7 +1161,7 @@ CLIENT_send_replays = global.CLIENT_send_replays = (client, room) ->
return true return true
SOCKET_flush_data = global.SOCKET_flush_data = (sk, datas) -> SOCKET_flush_data = global.SOCKET_flush_data = (sk, datas) ->
if !sk or sk.closed if !sk or sk.isClosed
return false return false
while datas.length while datas.length
buffer = datas.shift() buffer = datas.shift()
...@@ -1512,7 +1512,7 @@ class Room ...@@ -1512,7 +1512,7 @@ class Room
if !settings.modules.reconnect.enabled if !settings.modules.reconnect.enabled
return 0 return 0
found = 0 found = 0
for player in @get_playing_player() when player.closed for player in @get_playing_player() when player.isClosed
found++ found++
return found return found
...@@ -1772,11 +1772,22 @@ class Room ...@@ -1772,11 +1772,22 @@ class Room
else else
@last_active_time = moment_now_string @last_active_time = moment_now_string
addRecorderBuffer: (buffer, isChat) -> addRecorderBuffer: (buffer) ->
if settings.modules.cloud_replay.enabled and (!isChat or @arena or settings.modules.tournament_mode.enabled) if settings.modules.cloud_replay.enabled
@recorder_buffers.push buffer @recorder_buffers.push buffer
return return
recordChatMessage: (msg, player) ->
unless settings.modules.cloud_replay.enabled and (@arena or settings.modules.tournament_mode.enabled)
return
for line in ygopro.split_chat_lines(msg, player, settings.modules.i18n.default)
chat_buf = ygopro.helper.prepareMessage("STOC_CHAT", {
player: player
msg: line
})
@addRecorderBuffer(chat_buf)
return
# 网络连接 # 网络连接
netRequestHandler = (client) -> netRequestHandler = (client) ->
if !client.isWs if !client.isWs
...@@ -1803,16 +1814,16 @@ netRequestHandler = (client) -> ...@@ -1803,16 +1814,16 @@ netRequestHandler = (client) ->
# 释放处理 # 释放处理
closeHandler = (error) -> closeHandler = (error) ->
log.info "client closed", client.name, error, client.closed #log.info "client closed", client.name, error, client.isClosed
log.info "disconnect", client.ip, ROOM_connected_ip[client.ip] #log.info "disconnect", client.ip, ROOM_connected_ip[client.ip]
if client.closed if client.isClosed
return return
room=ROOM_all[client.rid] room=ROOM_all[client.rid]
connect_count = ROOM_connected_ip[client.ip] connect_count = ROOM_connected_ip[client.ip]
if connect_count > 0 if connect_count > 0
connect_count-- connect_count--
ROOM_connected_ip[client.ip] = connect_count ROOM_connected_ip[client.ip] = connect_count
client.closed = true client.isClosed = true
if settings.modules.heartbeat_detection.enabled if settings.modules.heartbeat_detection.enabled
CLIENT_heartbeat_unregister(client) CLIENT_heartbeat_unregister(client)
if room if room
...@@ -1836,14 +1847,14 @@ netRequestHandler = (client) -> ...@@ -1836,14 +1847,14 @@ netRequestHandler = (client) ->
server.on 'close', (had_error) -> server.on 'close', (had_error) ->
server.closed = true unless server.closed server.isClosed = true unless server.isClosed
if !server.client if !server.client
return return
#log.info "server closed", server.client.name, had_error #log.info "server isClosed", server.client.name, had_error
room=ROOM_all[server.client.rid] room=ROOM_all[server.client.rid]
#log.info "server close", server.client.ip, ROOM_connected_ip[server.client.ip] #log.info "server close", server.client.ip, ROOM_connected_ip[server.client.ip]
room.disconnector = 'server' if room and !server.system_kicked and !server.had_new_reconnection room.disconnector = 'server' if room and !server.system_kicked and !server.had_new_reconnection
unless server.client.closed unless server.client.isClosed
ygopro.stoc_send_chat(server.client, "${server_closed}", ygopro.constants.COLORS.RED) ygopro.stoc_send_chat(server.client, "${server_closed}", ygopro.constants.COLORS.RED)
#if room and settings.modules.replay_delay #if room and settings.modules.replay_delay
# room.send_replays() # room.send_replays()
...@@ -1852,14 +1863,14 @@ netRequestHandler = (client) -> ...@@ -1852,14 +1863,14 @@ netRequestHandler = (client) ->
return return
server.on 'error', (error)-> server.on 'error', (error)->
server.closed = error server.isClosed = error
if !server.client if !server.client
return return
#log.info "server error", client.name, error #log.info "server error", client.name, error
room=ROOM_all[server.client.rid] room=ROOM_all[server.client.rid]
#log.info "server err close", client.ip, ROOM_connected_ip[client.ip] #log.info "server err close", client.ip, ROOM_connected_ip[client.ip]
room.disconnector = 'server' if room and !server.system_kicked and !server.had_new_reconnection room.disconnector = 'server' if room and !server.system_kicked and !server.had_new_reconnection
unless server.client.closed unless server.client.isClosed
ygopro.stoc_send_chat(server.client, "${server_error}: #{error}", ygopro.constants.COLORS.RED) ygopro.stoc_send_chat(server.client, "${server_error}: #{error}", ygopro.constants.COLORS.RED)
#if room and settings.modules.replay_delay #if room and settings.modules.replay_delay
# room.send_replays() # room.send_replays()
...@@ -1931,7 +1942,7 @@ netRequestHandler = (client) -> ...@@ -1931,7 +1942,7 @@ netRequestHandler = (client) ->
ROOM_bad_ip[client.ip] = 1 ROOM_bad_ip[client.ip] = 1
CLIENT_kick(client) CLIENT_kick(client)
return return
if client.closed || !client.server if client.isClosed || !client.server
return return
if client.established if client.established
await ygopro.helper.send(client.server, buffer) for buffer in handle_data.datas await ygopro.helper.send(client.server, buffer) for buffer in handle_data.datas
...@@ -1956,7 +1967,7 @@ netRequestHandler = (client) -> ...@@ -1956,7 +1967,7 @@ netRequestHandler = (client) ->
if handle_data.feedback.type == "OVERSIZE" if handle_data.feedback.type == "OVERSIZE"
server.destroy() server.destroy()
return return
if server.client and !server.client.closed if server.client and !server.client.isClosed
await ygopro.helper.send(server.client, buffer) for buffer in handle_data.datas await ygopro.helper.send(server.client, buffer) for buffer in handle_data.datas
return return
...@@ -2122,7 +2133,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2122,7 +2133,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
(checksum & 0xFF) == 0 (checksum & 0xFF) == 0
create_room_with_action = (buffer, decrypted_buffer)-> create_room_with_action = (buffer, decrypted_buffer)->
if client.closed if client.isClosed
return return
firstByte = buffer.readUInt8(1) firstByte = buffer.readUInt8(1)
action = firstByte >> 4 action = firstByte >> 4
...@@ -2201,7 +2212,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2201,7 +2212,7 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
match_permit = matchPermitRes.data match_permit = matchPermitRes.data
catch e catch e
log.warn "match permit fail #{e.toString()}" log.warn "match permit fail #{e.toString()}"
if client.closed if client.isClosed
return return
if match_permit and match_permit.permit == false if match_permit and match_permit.permit == false
ygopro.stoc_die(client, '${invalid_password_unauthorized}') ygopro.stoc_die(client, '${invalid_password_unauthorized}')
...@@ -2258,10 +2269,10 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2258,10 +2269,10 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
#console.log userData #console.log userData
catch e catch e
log.warn("READ USER FAIL", client.name, e.toString()) log.warn("READ USER FAIL", client.name, e.toString())
if !client.closed if !client.isClosed
ygopro.stoc_die(client, '${load_user_info_fail}') ygopro.stoc_die(client, '${load_user_info_fail}')
return return
if client.closed if client.isClosed
return return
users_cache[client.name] = userData.user.id users_cache[client.name] = userData.user.id
secret = userData.user.id % 65535 + 1 secret = userData.user.id % 65535 + 1
...@@ -2292,18 +2303,18 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2292,18 +2303,18 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
recover_match = info.pass.match(/^(RC|RECOVER)(\d*)T(\d*)$/) recover_match = info.pass.match(/^(RC|RECOVER)(\d*)T(\d*)$/)
tournament_data = await challonge.getTournament(!!recover_match) tournament_data = await challonge.getTournament(!!recover_match)
if !tournament_data if !tournament_data
if !client.closed if !client.isClosed
ygopro.stoc_die(client, '${challonge_match_load_failed}') ygopro.stoc_die(client, '${challonge_match_load_failed}')
return return
matching_participant = tournament_data.participants.find((p) => p.participant.name and deck_name_match(p.participant.name, client.name)) matching_participant = tournament_data.participants.find((p) => p.participant.name and deck_name_match(p.participant.name, client.name))
unless matching_participant unless matching_participant
if !client.closed if !client.isClosed
ygopro.stoc_die(client, '${challonge_user_not_found}') ygopro.stoc_die(client, '${challonge_user_not_found}')
return return
client.challonge_info = matching_participant.participant client.challonge_info = matching_participant.participant
matching_match = tournament_data.matches.find((match) => match.match and !match.match.winner_id and match.match.state != "complete" and match.match.player1_id and match.match.player2_id and (match.match.player1_id == client.challonge_info.id or match.match.player2_id == client.challonge_info.id)) matching_match = tournament_data.matches.find((match) => match.match and !match.match.winner_id and match.match.state != "complete" and match.match.player1_id and match.match.player2_id and (match.match.player1_id == client.challonge_info.id or match.match.player2_id == client.challonge_info.id))
unless matching_match unless matching_match
if !client.closed if !client.isClosed
ygopro.stoc_die(client, '${challonge_match_not_found}') ygopro.stoc_die(client, '${challonge_match_not_found}')
return return
create_room_name = matching_match.match.id.toString() create_room_name = matching_match.match.id.toString()
...@@ -3358,7 +3369,7 @@ ygopro.stoc_follow 'TIME_LIMIT', true, (buffer, info, client, server, datas)-> ...@@ -3358,7 +3369,7 @@ ygopro.stoc_follow 'TIME_LIMIT', true, (buffer, info, client, server, datas)->
ygopro.ctos_send(server, 'TIME_CONFIRM') ygopro.ctos_send(server, 'TIME_CONFIRM')
return true return true
if settings.modules.reconnect.enabled if settings.modules.reconnect.enabled
if client.closed if client.isClosed
ygopro.ctos_send(server, 'TIME_CONFIRM') ygopro.ctos_send(server, 'TIME_CONFIRM')
return true return true
else else
......
...@@ -1321,7 +1321,7 @@ ...@@ -1321,7 +1321,7 @@
ref = room.get_playing_player(); ref = room.get_playing_player();
for (l = 0, len1 = ref.length; l < len1; l++) { for (l = 0, len1 = ref.length; l < len1; l++) {
player = ref[l]; player = ref[l];
if (!player.closed && player.name === client.name && (settings.modules.challonge.enabled || player.pass === client.pass) && (settings.modules.mycard.enabled || settings.modules.tournament_mode.enabled || player.ip === client.ip || (client.vpass && client.vpass === player.vpass)) && (!deckbuf || deckbuf.compare(player.start_deckbuf) === 0)) { if (!player.isClosed && player.name === client.name && (settings.modules.challonge.enabled || player.pass === client.pass) && (settings.modules.mycard.enabled || settings.modules.tournament_mode.enabled || player.ip === client.ip || (client.vpass && client.vpass === player.vpass)) && (!deckbuf || deckbuf.compare(player.start_deckbuf) === 0)) {
return player; return player;
} }
} }
...@@ -1481,7 +1481,7 @@ ...@@ -1481,7 +1481,7 @@
}; };
CLIENT_heartbeat_register = global.CLIENT_heartbeat_register = function(client, send) { CLIENT_heartbeat_register = global.CLIENT_heartbeat_register = function(client, send) {
if (!settings.modules.heartbeat_detection.enabled || client.closed || client.is_post_watcher || client.pre_reconnecting || client.reconnecting || client.waiting_for_last || client.pos > 3 || client.heartbeat_protected) { if (!settings.modules.heartbeat_detection.enabled || client.isClosed || client.is_post_watcher || client.pre_reconnecting || client.reconnecting || client.waiting_for_last || client.pos > 3 || client.heartbeat_protected) {
return false; return false;
} }
if (client.heartbeat_timeout) { if (client.heartbeat_timeout) {
...@@ -1500,7 +1500,7 @@ ...@@ -1500,7 +1500,7 @@
} }
client.heartbeat_timeout = setTimeout(function() { client.heartbeat_timeout = setTimeout(function() {
CLIENT_heartbeat_unregister(client); CLIENT_heartbeat_unregister(client);
if (!(client.closed || client.heartbeat_responsed)) { if (!(client.isClosed || client.heartbeat_responsed)) {
client.destroy(); client.destroy();
} }
}, settings.modules.heartbeat_detection.wait_time); }, settings.modules.heartbeat_detection.wait_time);
...@@ -1514,7 +1514,7 @@ ...@@ -1514,7 +1514,7 @@
CLIENT_send_replays = global.CLIENT_send_replays = function(client, room) { CLIENT_send_replays = global.CLIENT_send_replays = function(client, room) {
var buffer, i, j, len, ref; var buffer, i, j, len, ref;
if (!(settings.modules.replay_delay && !(settings.modules.tournament_mode.enabled && settings.modules.tournament_mode.block_replay_to_player) && room.replays.length && room.hostinfo.mode === 1 && !client.replays_sent && !client.closed)) { if (!(settings.modules.replay_delay && !(settings.modules.tournament_mode.enabled && settings.modules.tournament_mode.block_replay_to_player) && room.replays.length && room.hostinfo.mode === 1 && !client.replays_sent && !client.isClosed)) {
return false; return false;
} }
client.replays_sent = true; client.replays_sent = true;
...@@ -1533,7 +1533,7 @@ ...@@ -1533,7 +1533,7 @@
SOCKET_flush_data = global.SOCKET_flush_data = async function(sk, datas) { SOCKET_flush_data = global.SOCKET_flush_data = async function(sk, datas) {
var buffer; var buffer;
if (!sk || sk.closed) { if (!sk || sk.isClosed) {
return false; return false;
} }
while (datas.length) { while (datas.length) {
...@@ -2002,7 +2002,7 @@ ...@@ -2002,7 +2002,7 @@
ref = this.get_playing_player(); ref = this.get_playing_player();
for (j = 0, len = ref.length; j < len; j++) { for (j = 0, len = ref.length; j < len; j++) {
player = ref[j]; player = ref[j];
if (player.closed) { if (player.isClosed) {
found++; found++;
} }
} }
...@@ -2397,12 +2397,28 @@ ...@@ -2397,12 +2397,28 @@
} }
} }
addRecorderBuffer(buffer, isChat) { addRecorderBuffer(buffer) {
if (settings.modules.cloud_replay.enabled && (!isChat || this.arena || settings.modules.tournament_mode.enabled)) { if (settings.modules.cloud_replay.enabled) {
this.recorder_buffers.push(buffer); this.recorder_buffers.push(buffer);
} }
} }
recordChatMessage(msg, player) {
var chat_buf, j, len, line, ref;
if (!(settings.modules.cloud_replay.enabled && (this.arena || settings.modules.tournament_mode.enabled))) {
return;
}
ref = ygopro.split_chat_lines(msg, player, settings.modules.i18n.default);
for (j = 0, len = ref.length; j < len; j++) {
line = ref[j];
chat_buf = ygopro.helper.prepareMessage("STOC_CHAT", {
player: player,
msg: line
});
this.addRecorderBuffer(chat_buf);
}
}
}; };
// 网络连接 // 网络连接
...@@ -2432,9 +2448,9 @@ ...@@ -2432,9 +2448,9 @@
// 释放处理 // 释放处理
closeHandler = function(error) { closeHandler = function(error) {
var room; var room;
log.info("client closed", client.name, error, client.closed); //log.info "client closed", client.name, error, client.isClosed
log.info("disconnect", client.ip, ROOM_connected_ip[client.ip]); //log.info "disconnect", client.ip, ROOM_connected_ip[client.ip]
if (client.closed) { if (client.isClosed) {
return; return;
} }
room = ROOM_all[client.rid]; room = ROOM_all[client.rid];
...@@ -2443,7 +2459,7 @@ ...@@ -2443,7 +2459,7 @@
connect_count--; connect_count--;
} }
ROOM_connected_ip[client.ip] = connect_count; ROOM_connected_ip[client.ip] = connect_count;
client.closed = true; client.isClosed = true;
if (settings.modules.heartbeat_detection.enabled) { if (settings.modules.heartbeat_detection.enabled) {
CLIENT_heartbeat_unregister(client); CLIENT_heartbeat_unregister(client);
} }
...@@ -2474,19 +2490,19 @@ ...@@ -2474,19 +2490,19 @@
client.on('error', closeHandler); client.on('error', closeHandler);
server.on('close', function(had_error) { server.on('close', function(had_error) {
var room; var room;
if (!server.closed) { if (!server.isClosed) {
server.closed = true; server.isClosed = true;
} }
if (!server.client) { if (!server.client) {
return; return;
} }
//log.info "server closed", server.client.name, had_error //log.info "server isClosed", server.client.name, had_error
room = ROOM_all[server.client.rid]; room = ROOM_all[server.client.rid];
if (room && !server.system_kicked && !server.had_new_reconnection) { if (room && !server.system_kicked && !server.had_new_reconnection) {
//log.info "server close", server.client.ip, ROOM_connected_ip[server.client.ip] //log.info "server close", server.client.ip, ROOM_connected_ip[server.client.ip]
room.disconnector = 'server'; room.disconnector = 'server';
} }
if (!server.client.closed) { if (!server.client.isClosed) {
ygopro.stoc_send_chat(server.client, "${server_closed}", ygopro.constants.COLORS.RED); ygopro.stoc_send_chat(server.client, "${server_closed}", ygopro.constants.COLORS.RED);
//if room and settings.modules.replay_delay //if room and settings.modules.replay_delay
// room.send_replays() // room.send_replays()
...@@ -2496,7 +2512,7 @@ ...@@ -2496,7 +2512,7 @@
}); });
server.on('error', function(error) { server.on('error', function(error) {
var room; var room;
server.closed = error; server.isClosed = error;
if (!server.client) { if (!server.client) {
return; return;
} }
...@@ -2506,7 +2522,7 @@ ...@@ -2506,7 +2522,7 @@
//log.info "server err close", client.ip, ROOM_connected_ip[client.ip] //log.info "server err close", client.ip, ROOM_connected_ip[client.ip]
room.disconnector = 'server'; room.disconnector = 'server';
} }
if (!server.client.closed) { if (!server.client.isClosed) {
ygopro.stoc_send_chat(server.client, `\${server_error}: ${error}`, ygopro.constants.COLORS.RED); ygopro.stoc_send_chat(server.client, `\${server_error}: ${error}`, ygopro.constants.COLORS.RED);
//if room and settings.modules.replay_delay //if room and settings.modules.replay_delay
// room.send_replays() // room.send_replays()
...@@ -2594,7 +2610,7 @@ ...@@ -2594,7 +2610,7 @@
return; return;
} }
} }
if (client.closed || !client.server) { if (client.isClosed || !client.server) {
return; return;
} }
if (client.established) { if (client.established) {
...@@ -2627,7 +2643,7 @@ ...@@ -2627,7 +2643,7 @@
return; return;
} }
} }
if (server.client && !server.client.closed) { if (server.client && !server.client.isClosed) {
ref = handle_data.datas; ref = handle_data.datas;
for (j = 0, len = ref.length; j < len; j++) { for (j = 0, len = ref.length; j < len; j++) {
buffer = ref[j]; buffer = ref[j];
...@@ -2809,7 +2825,7 @@ ...@@ -2809,7 +2825,7 @@
}; };
create_room_with_action = async function(buffer, decrypted_buffer) { create_room_with_action = async function(buffer, decrypted_buffer) {
var action, e, firstByte, len2, m, matchPermitRes, match_permit, name, opt0, opt1, opt2, opt3, options, player, ref, ref1, room, room_title, title; var action, e, firstByte, len2, m, matchPermitRes, match_permit, name, opt0, opt1, opt2, opt3, options, player, ref, ref1, room, room_title, title;
if (client.closed) { if (client.isClosed) {
return; return;
} }
firstByte = buffer.readUInt8(1); firstByte = buffer.readUInt8(1);
...@@ -2904,7 +2920,7 @@ ...@@ -2904,7 +2920,7 @@
e = error1; e = error1;
log.warn(`match permit fail ${e.toString()}`); log.warn(`match permit fail ${e.toString()}`);
} }
if (client.closed) { if (client.isClosed) {
return; return;
} }
if (match_permit && match_permit.permit === false) { if (match_permit && match_permit.permit === false) {
...@@ -2981,12 +2997,12 @@ ...@@ -2981,12 +2997,12 @@
//console.log userData //console.log userData
e = error1; e = error1;
log.warn("READ USER FAIL", client.name, e.toString()); log.warn("READ USER FAIL", client.name, e.toString());
if (!client.closed) { if (!client.isClosed) {
ygopro.stoc_die(client, '${load_user_info_fail}'); ygopro.stoc_die(client, '${load_user_info_fail}');
} }
return; return;
} }
if (client.closed) { if (client.isClosed) {
return; return;
} }
users_cache[client.name] = userData.user.id; users_cache[client.name] = userData.user.id;
...@@ -3023,7 +3039,7 @@ ...@@ -3023,7 +3039,7 @@
recover_match = info.pass.match(/^(RC|RECOVER)(\d*)T(\d*)$/); recover_match = info.pass.match(/^(RC|RECOVER)(\d*)T(\d*)$/);
tournament_data = (await challonge.getTournament(!!recover_match)); tournament_data = (await challonge.getTournament(!!recover_match));
if (!tournament_data) { if (!tournament_data) {
if (!client.closed) { if (!client.isClosed) {
ygopro.stoc_die(client, '${challonge_match_load_failed}'); ygopro.stoc_die(client, '${challonge_match_load_failed}');
} }
return; return;
...@@ -3032,7 +3048,7 @@ ...@@ -3032,7 +3048,7 @@
return p.participant.name && deck_name_match(p.participant.name, client.name); return p.participant.name && deck_name_match(p.participant.name, client.name);
}); });
if (!matching_participant) { if (!matching_participant) {
if (!client.closed) { if (!client.isClosed) {
ygopro.stoc_die(client, '${challonge_user_not_found}'); ygopro.stoc_die(client, '${challonge_user_not_found}');
} }
return; return;
...@@ -3042,7 +3058,7 @@ ...@@ -3042,7 +3058,7 @@
return match.match && !match.match.winner_id && match.match.state !== "complete" && match.match.player1_id && match.match.player2_id && (match.match.player1_id === client.challonge_info.id || match.match.player2_id === client.challonge_info.id); return match.match && !match.match.winner_id && match.match.state !== "complete" && match.match.player1_id && match.match.player2_id && (match.match.player1_id === client.challonge_info.id || match.match.player2_id === client.challonge_info.id);
}); });
if (!matching_match) { if (!matching_match) {
if (!client.closed) { if (!client.isClosed) {
ygopro.stoc_die(client, '${challonge_match_not_found}'); ygopro.stoc_die(client, '${challonge_match_not_found}');
} }
return; return;
...@@ -4502,7 +4518,7 @@ ...@@ -4502,7 +4518,7 @@
return true; return true;
} }
if (settings.modules.reconnect.enabled) { if (settings.modules.reconnect.enabled) {
if (client.closed) { if (client.isClosed) {
ygopro.ctos_send(server, 'TIME_CONFIRM'); ygopro.ctos_send(server, 'TIME_CONFIRM');
return true; return true;
} else { } else {
......
...@@ -59,15 +59,21 @@ translateHandler = (handler) -> ...@@ -59,15 +59,21 @@ translateHandler = (handler) ->
return @helper.sendMessage(socket, "CTOS_#{proto}", info) return @helper.sendMessage(socket, "CTOS_#{proto}", info)
#util #util
@stoc_send_chat = (client, msg, player = 8)-> @split_chat_lines = (msg, player, lang) ->
if !client lines = []
console.log "err stoc_send_chat"
return
for line in _.lines(msg) for line in _.lines(msg)
if player>=10 if player>=10
line="[Server]: "+line line="[Server]: "+line
for o,r of @i18nR[client.lang] for o,r of @i18nR[lang]
line=line.replace(r.regex, r.text) line=line.replace(r.regex, r.text)
lines.push(line)
return lines
@stoc_send_chat = (client, msg, player = 8)->
if !client
console.log "err stoc_send_chat"
return
for line in @split_chat_lines(msg, player, client.lang)
await @stoc_send client, 'CHAT', { await @stoc_send client, 'CHAT', {
player: player player: player
msg: line msg: line
...@@ -82,6 +88,7 @@ translateHandler = (handler) -> ...@@ -82,6 +88,7 @@ translateHandler = (handler) ->
@stoc_send_chat(client, msg, player) if client @stoc_send_chat(client, msg, player) if client
for client in room.watchers for client in room.watchers
@stoc_send_chat(client, msg, player) if client @stoc_send_chat(client, msg, player) if client
room.recordChatMessage(msg, player)
return return
@stoc_send_hint_card_to_room = (room, card)-> @stoc_send_hint_card_to_room = (room, card)->
......
...@@ -94,7 +94,8 @@ ...@@ -94,7 +94,8 @@
return this.helper.sendMessage(socket, `CTOS_${proto}`, info); return this.helper.sendMessage(socket, `CTOS_${proto}`, info);
}; };
this.splitLines = function(msg, player) { //util
this.split_chat_lines = function(msg, player, lang) {
var i, len, line, lines, o, r, ref, ref1; var i, len, line, lines, o, r, ref, ref1;
lines = []; lines = [];
ref = _.lines(msg); ref = _.lines(msg);
...@@ -103,7 +104,7 @@ ...@@ -103,7 +104,7 @@
if (player >= 10) { if (player >= 10) {
line = "[Server]: " + line; line = "[Server]: " + line;
} }
ref1 = this.i18nR[client.lang]; ref1 = this.i18nR[lang];
for (o in ref1) { for (o in ref1) {
r = ref1[o]; r = ref1[o];
line = line.replace(r.regex, r.text); line = line.replace(r.regex, r.text);
...@@ -113,14 +114,13 @@ ...@@ -113,14 +114,13 @@
return lines; return lines;
}; };
//util
this.stoc_send_chat = async function(client, msg, player = 8) { this.stoc_send_chat = async function(client, msg, player = 8) {
var i, len, line, ref; var i, len, line, ref;
if (!client) { if (!client) {
console.log("err stoc_send_chat"); console.log("err stoc_send_chat");
return; return;
} }
ref = this.splitLines(msg, player); ref = this.split_chat_lines(msg, player, client.lang);
for (i = 0, len = ref.length; i < len; i++) { for (i = 0, len = ref.length; i < len; i++) {
line = ref[i]; line = ref[i];
await this.stoc_send(client, 'CHAT', { await this.stoc_send(client, 'CHAT', {
...@@ -131,36 +131,26 @@ ...@@ -131,36 +131,26 @@
}; };
this.stoc_send_chat_to_room = function(room, msg, player = 8) { this.stoc_send_chat_to_room = function(room, msg, player = 8) {
var chat_buffer, client, i, j, k, len, len1, len2, line, ref, ref1, ref2; var client, i, j, len, len1, ref, ref1;
if (!room) { if (!room) {
console.log("err stoc_send_chat_to_room"); console.log("err stoc_send_chat_to_room");
return; return;
} }
ref = this.splitLines(msg, player); ref = room.players;
for (i = 0, len = ref.length; i < len; i++) { for (i = 0, len = ref.length; i < len; i++) {
line = ref[i]; client = ref[i];
chat_buffer = this.helper.prepareMessage("STOC_CHAT", {
player: player,
msg: line
});
ref1 = room.players;
for (j = 0, len1 = ref1.length; j < len1; j++) {
client = ref1[j];
if (client) { if (client) {
this.helper.send(client, chat_buffer); this.stoc_send_chat(client, msg, player);
} }
} }
ref2 = room.watchers; ref1 = room.watchers;
for (k = 0, len2 = ref2.length; k < len2; k++) { for (j = 0, len1 = ref1.length; j < len1; j++) {
client = ref2[k]; client = ref1[j];
if (client) { if (client) {
this.helper.send(client, chat_buffer); this.stoc_send_chat(client, msg, player);
}
}
if (room.duel_stage !== this.constants.DUEL_STAGE.BEGIN) {
room.addRecorderBuffer(chat_buffer, true);
} }
} }
room.recordChatMessage(msg, player);
}; };
this.stoc_send_hint_card_to_room = function(room, card) { this.stoc_send_hint_card_to_room = function(room, card) {
......
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