Commit fa26e4c8 authored by nanahira's avatar nanahira

flush data queue before sending replay

parent e7879474
......@@ -865,6 +865,12 @@ CLIENT_send_replays = (client, room) ->
ygopro.stoc_send(client, "REPLAY", buffer)
return true
SOCKET_flush_data = (sk, datas) ->
for buffer in datas
sk.write(buffer)
datas.splice(0, datas.length)
return
class Room
constructor: (name, @hostinfo) ->
@name = name
......@@ -1441,9 +1447,9 @@ net.createServer (client) ->
struct._setBuff(b)
info = _.clone(struct.fields)
if ygopro.ctos_follows[ctos_proto].synchronous
cancel = ygopro.ctos_follows[ctos_proto].callback b, info, client, client.server
cancel = ygopro.ctos_follows[ctos_proto].callback b, info, client, client.server, datas
else
ygopro.ctos_follows[ctos_proto].callback b, info, client, client.server
ygopro.ctos_follows[ctos_proto].callback b, info, client, client.server, datas
datas.push ctos_buffer.slice(0, 2 + ctos_message_length) unless cancel
ctos_buffer = ctos_buffer.slice(2 + ctos_message_length)
ctos_message_length = 0
......@@ -1510,9 +1516,9 @@ net.createServer (client) ->
struct._setBuff(b)
info = _.clone(struct.fields)
if ygopro.stoc_follows[stoc_proto].synchronous
cancel = ygopro.stoc_follows[stoc_proto].callback b, info, server.client, server
cancel = ygopro.stoc_follows[stoc_proto].callback b, info, server.client, server, datas
else
ygopro.stoc_follows[stoc_proto].callback b, info, server.client, server
ygopro.stoc_follows[stoc_proto].callback b, info, server.client, server, datas
datas.push stoc_buffer.slice(0, 2 + stoc_message_length) unless cancel
stoc_buffer = stoc_buffer.slice(2 + stoc_message_length)
stoc_message_length = 0
......@@ -2441,14 +2447,15 @@ ygopro.stoc_follow 'FIELD_FINISH', true, (buffer, info, client, server)->
ygopro.stoc_send(client, 'GAME_MSG', client.last_game_msg)
return true
ygopro.stoc_follow 'DUEL_END', false, (buffer, info, client, server)->
ygopro.stoc_follow 'DUEL_END', false, (buffer, info, client, server, datas)->
room=ROOM_all[client.rid]
return unless room and settings.modules.replay_delay and room.hostinfo.mode == 1
SOCKET_flush_data(client, datas)
CLIENT_send_replays(client, room)
if !room.replays_sent_to_watchers
room.replays_sent_to_watchers = true
for player in room.players when player and player.pos > 3
CLIENT_send_replays(player, room)
# for player in room.players when player and player.pos > 3
# CLIENT_send_replays(player, room)
for player in room.watchers when player
CLIENT_send_replays(player, room)
......
// Generated by CoffeeScript 1.12.7
(function() {
var CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, CLIENT_heartbeat_register, CLIENT_heartbeat_unregister, CLIENT_import_data, CLIENT_is_able_to_kick_reconnect, CLIENT_is_able_to_reconnect, CLIENT_is_banned_by_mc, CLIENT_is_player, CLIENT_kick, CLIENT_kick_reconnect, CLIENT_pre_reconnect, CLIENT_reconnect, CLIENT_reconnect_register, CLIENT_reconnect_unregister, CLIENT_send_pre_reconnect_info, CLIENT_send_reconnect_info, CLIENT_send_replays, Cloud_replay_ids, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_port, ROOM_find_by_title, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_player_flee, ROOM_player_get_score, ROOM_player_lose, ROOM_player_win, ROOM_players_banned, ROOM_players_oppentlist, ROOM_players_scores, ROOM_unwelcome, ROOM_validate, Room, SERVER_clear_disconnect, _, addCallback, badwords, ban_user, bunyan, challonge, challonge_cache, challonge_queue_callbacks, chat_color, config, cppversion, crypto, date, default_config, default_data, dialogues, disconnect_list, duel_log, e, exec, execFile, fs, geoip, get_callback, get_memory_usage, http, http_server, https, https_server, import_datas, imported, is_requesting, j, l, len, len1, lflists, list, loadJSON, load_dialogues, load_tips, log, long_resolve_cards, memory_usage, merge, moment, net, oldbadwords, oldconfig, olddialogues, oldduellog, oldtips, options, os, path, pgClient, pg_client, pg_query, redis, redisdb, ref, ref1, refresh_challonge_cache, release_disconnect, report_to_big_brother, request, requestListener, roomlist, setting_change, setting_save, settings, spawn, spawnSync, spawn_windbot, tips, url, users_cache, wait_room_start, wait_room_start_arena, windbot_looplimit, windbots, ygopro, zlib;
var CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, CLIENT_heartbeat_register, CLIENT_heartbeat_unregister, CLIENT_import_data, CLIENT_is_able_to_kick_reconnect, CLIENT_is_able_to_reconnect, CLIENT_is_banned_by_mc, CLIENT_is_player, CLIENT_kick, CLIENT_kick_reconnect, CLIENT_pre_reconnect, CLIENT_reconnect, CLIENT_reconnect_register, CLIENT_reconnect_unregister, CLIENT_send_pre_reconnect_info, CLIENT_send_reconnect_info, CLIENT_send_replays, Cloud_replay_ids, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_port, ROOM_find_by_title, ROOM_find_or_create_ai, ROOM_find_or_create_by_name, ROOM_find_or_create_random, ROOM_player_flee, ROOM_player_get_score, ROOM_player_lose, ROOM_player_win, ROOM_players_banned, ROOM_players_oppentlist, ROOM_players_scores, ROOM_unwelcome, ROOM_validate, Room, SERVER_clear_disconnect, SOCKET_flush_data, _, addCallback, badwords, ban_user, bunyan, challonge, challonge_cache, challonge_queue_callbacks, chat_color, config, cppversion, crypto, date, default_config, default_data, dialogues, disconnect_list, duel_log, e, exec, execFile, fs, geoip, get_callback, get_memory_usage, http, http_server, https, https_server, import_datas, imported, is_requesting, j, l, len, len1, lflists, list, loadJSON, load_dialogues, load_tips, log, long_resolve_cards, memory_usage, merge, moment, net, oldbadwords, oldconfig, olddialogues, oldduellog, oldtips, options, os, path, pgClient, pg_client, pg_query, redis, redisdb, ref, ref1, refresh_challonge_cache, release_disconnect, report_to_big_brother, request, requestListener, roomlist, setting_change, setting_save, settings, spawn, spawnSync, spawn_windbot, tips, url, users_cache, wait_room_start, wait_room_start_arena, windbot_looplimit, windbots, ygopro, zlib;
net = require('net');
......@@ -1111,6 +1111,15 @@
return true;
};
SOCKET_flush_data = function(sk, datas) {
var buffer, len2, m;
for (m = 0, len2 = datas.length; m < len2; m++) {
buffer = datas[m];
sk.write(buffer);
}
datas.splice(0, datas.length);
};
Room = (function() {
function Room(name, hostinfo) {
var draw_count, lflist, param, rule, start_hand, start_lp, time_limit;
......@@ -1834,9 +1843,9 @@
info = _.clone(struct.fields);
}
if (ygopro.ctos_follows[ctos_proto].synchronous) {
cancel = ygopro.ctos_follows[ctos_proto].callback(b, info, client, client.server);
cancel = ygopro.ctos_follows[ctos_proto].callback(b, info, client, client.server, datas);
} else {
ygopro.ctos_follows[ctos_proto].callback(b, info, client, client.server);
ygopro.ctos_follows[ctos_proto].callback(b, info, client, client.server, datas);
}
}
if (!cancel) {
......@@ -1916,9 +1925,9 @@
info = _.clone(struct.fields);
}
if (ygopro.stoc_follows[stoc_proto].synchronous) {
cancel = ygopro.stoc_follows[stoc_proto].callback(b, info, server.client, server);
cancel = ygopro.stoc_follows[stoc_proto].callback(b, info, server.client, server, datas);
} else {
ygopro.stoc_follows[stoc_proto].callback(b, info, server.client, server);
ygopro.stoc_follows[stoc_proto].callback(b, info, server.client, server, datas);
}
}
if (!cancel) {
......@@ -3031,26 +3040,20 @@
return true;
});
ygopro.stoc_follow('DUEL_END', false, function(buffer, info, client, server) {
var len2, len3, m, n, player, ref2, ref3, results, room;
ygopro.stoc_follow('DUEL_END', false, function(buffer, info, client, server, datas) {
var len2, m, player, ref2, results, room;
room = ROOM_all[client.rid];
if (!(room && settings.modules.replay_delay && room.hostinfo.mode === 1)) {
return;
}
SOCKET_flush_data(client, datas);
CLIENT_send_replays(client, room);
if (!room.replays_sent_to_watchers) {
room.replays_sent_to_watchers = true;
ref2 = room.players;
ref2 = room.watchers;
results = [];
for (m = 0, len2 = ref2.length; m < len2; m++) {
player = ref2[m];
if (player && player.pos > 3) {
CLIENT_send_replays(player, room);
}
}
ref3 = room.watchers;
results = [];
for (n = 0, len3 = ref3.length; n < len3; n++) {
player = ref3[n];
if (player) {
results.push(CLIENT_send_replays(player, room));
}
......
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