Commit c8a5b31b authored by nanahira's avatar nanahira

Merge branch 'develop' of ../srvpro into develop

parents 79f741d3 585a8921
Pipeline #38331 failed with stages
in 11 minutes and 55 seconds
......@@ -23,7 +23,7 @@
"moment": "^2.29.1",
"mysql": "^2.18.1",
"node-os-utils": "^1.3.2",
"p-queue": "6.6.2",
"p-queue": "^6.6.2",
"pg": "^6.4.2",
"q": "^1.5.1",
"querystring": "^0.2.0",
......@@ -2318,6 +2318,7 @@
"version": "6.6.2",
"resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz",
"integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==",
"license": "MIT",
"dependencies": {
"eventemitter3": "^4.0.4",
"p-timeout": "^3.2.0"
......
......@@ -25,7 +25,7 @@
"moment": "^2.29.1",
"mysql": "^2.18.1",
"node-os-utils": "^1.3.2",
"p-queue": "6.6.2",
"p-queue": "^6.6.2",
"pg": "^6.4.2",
"q": "^1.5.1",
"querystring": "^0.2.0",
......
......@@ -102,6 +102,8 @@ Aragami = require('aragami').Aragami
aragami = global.aragami = new Aragami() # we use memory mode only
PQueue = require('p-queue').default
aragami_classes = global.aragami_classes = require('./aragami-classes.js')
msg_polyfill = global.msg_polyfill = require('./msg-polyfill/index.js')
......@@ -2220,6 +2222,12 @@ netRequestHandler = (client) ->
client.pre_establish_buffers = new Array()
client_data_queue = new PQueue
concurrency: 1
server_data_queue = new PQueue
concurrency: 1
dataHandler = (ctos_buffer) ->
if client.is_post_watcher
room=ROOM_all[client.rid]
......@@ -2270,13 +2278,18 @@ netRequestHandler = (client) ->
return
queuedDataHandler = (ctos_buffer) ->
if client.isClosed or client.system_kicked
return
return await client_data_queue.add(() -> dataHandler(ctos_buffer))
if client.isWs
client.on 'message', dataHandler
client.on 'message', queuedDataHandler
else
client.on 'data', dataHandler
client.on 'data', queuedDataHandler
# 服务端到客户端(stoc)
server.on 'data', (stoc_buffer)->
serverDataHandler = (stoc_buffer)->
handle_data = await ygopro.helper.handleBuffer(stoc_buffer, "STOC", null, {
client: server.client,
server: server
......@@ -2290,6 +2303,13 @@ netRequestHandler = (client) ->
await ygopro.helper.send(server.client, buffer) for buffer in handle_data.datas
return
queuedServerDataHandler = (stoc_buffer) ->
if server.isClosed
return
return await server_data_queue.add(() -> serverDataHandler(stoc_buffer))
server.on 'data', queuedServerDataHandler
return
deck_name_match = global.deck_name_match = (deck_name, player_name) ->
......
// Generated by CoffeeScript 2.7.0
(function() {
// 标准库
var Aragami, CLIENT_check_vip, CLIENT_get_absolute_pos, CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, CLIENT_get_partner, CLIENT_get_save_data, 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, CLIENT_send_replays_and_kick, CLIENT_send_vip_status, CLIENT_set_ip, CLIENT_use_cdkey, Q, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_pid, 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_kick, ROOM_player_flee, ROOM_player_get_score, ROOM_player_lose, ROOM_player_win, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, ReplayParser, ResolveData, Room, SERVER_clear_disconnect, SERVER_kick, SOCKET_flush_data, VIP_generate_cdkeys, YGOProDeck, _, _async, addCallback, aragami, aragami_classes, athleticChecker, auth, axios, badwordR, badwords, ban_user, bunyan, challonge, checkFileExists, concat_name, createDirectoryIfNotExists, crypto, dataManager, deck_name_match, dialogues, disconnect_list, exec, execFile, extra_mode_list, fs, geoip, getDuelLogQueryFromQs, getRealIp, get_memory_usage, http, httpRequestListener, importOldConfig, import_datas, init, ip6addr, isTrustedProxy, lflists, loadJSON, loadJSONAsync, loadLFList, loadRemoteData, load_dialogues, load_dialogues_custom, load_tips, load_tips_zh, load_words, log, long_resolve_cards, memory_usage, merge, moment, moment_long_ago_string, moment_now, moment_now_string, msg_polyfill, neosRequestListener, net, netRequestHandler, os, osu, path, qs, real_windbot_server_ip, release_disconnect, report_to_big_brother, request, roomlist, rooms_count, setting_change, setting_get, setting_save, settings, spawn, spawnSync, spawn_windbot, tips, toIpv4, toIpv6, url, users_cache, util, utility, wait_room_start, wait_room_start_arena, windbot_looplimit, windbot_process, windbots, words, ygopro, zlib;
var Aragami, CLIENT_check_vip, CLIENT_get_absolute_pos, CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, CLIENT_get_partner, CLIENT_get_save_data, 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, CLIENT_send_replays_and_kick, CLIENT_send_vip_status, CLIENT_set_ip, CLIENT_use_cdkey, PQueue, Q, ROOM_all, ROOM_bad_ip, ROOM_ban_player, ROOM_clear_disconnect, ROOM_connected_ip, ROOM_find_by_name, ROOM_find_by_pid, 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_kick, ROOM_player_flee, ROOM_player_get_score, ROOM_player_lose, ROOM_player_win, ROOM_players_oppentlist, ROOM_unwelcome, ROOM_validate, ReplayParser, ResolveData, Room, SERVER_clear_disconnect, SERVER_kick, SOCKET_flush_data, VIP_generate_cdkeys, YGOProDeck, _, _async, addCallback, aragami, aragami_classes, athleticChecker, auth, axios, badwordR, badwords, ban_user, bunyan, challonge, checkFileExists, concat_name, createDirectoryIfNotExists, crypto, dataManager, deck_name_match, dialogues, disconnect_list, exec, execFile, extra_mode_list, fs, geoip, getDuelLogQueryFromQs, getRealIp, get_memory_usage, http, httpRequestListener, importOldConfig, import_datas, init, ip6addr, isTrustedProxy, lflists, loadJSON, loadJSONAsync, loadLFList, loadRemoteData, load_dialogues, load_dialogues_custom, load_tips, load_tips_zh, load_words, log, long_resolve_cards, memory_usage, merge, moment, moment_long_ago_string, moment_now, moment_now_string, msg_polyfill, neosRequestListener, net, netRequestHandler, os, osu, path, qs, real_windbot_server_ip, release_disconnect, report_to_big_brother, request, roomlist, rooms_count, setting_change, setting_get, setting_save, settings, spawn, spawnSync, spawn_windbot, tips, toIpv4, toIpv6, url, users_cache, util, utility, wait_room_start, wait_room_start_arena, windbot_looplimit, windbot_process, windbots, words, ygopro, zlib;
net = require('net');
......@@ -91,6 +91,8 @@
aragami = global.aragami = new Aragami(); // we use memory mode only
PQueue = require('p-queue').default;
aragami_classes = global.aragami_classes = require('./aragami-classes.js');
msg_polyfill = global.msg_polyfill = require('./msg-polyfill/index.js');
......@@ -2806,7 +2808,7 @@
// 网络连接
netRequestHandler = function(client) {
var closeHandler, dataHandler, server;
var client_data_queue, closeHandler, dataHandler, queuedDataHandler, queuedServerDataHandler, server, serverDataHandler, server_data_queue;
if (!client.isWs) {
client.physical_ip = client.remoteAddress || "";
if (CLIENT_set_ip(client)) {
......@@ -2943,6 +2945,12 @@
// 需要重构
// 客户端到服务端(ctos)协议分析
client.pre_establish_buffers = new Array();
client_data_queue = new PQueue({
concurrency: 1
});
server_data_queue = new PQueue({
concurrency: 1
});
dataHandler = async function(ctos_buffer) {
var bad_ip_count, buffer, ctos_filter, handle_data, j, l, len, len1, preconnect, ref, ref1, room;
if (client.is_post_watcher) {
......@@ -3011,13 +3019,21 @@
}
}
};
queuedDataHandler = async function(ctos_buffer) {
if (client.isClosed || client.system_kicked) {
return;
}
return (await client_data_queue.add(function() {
return dataHandler(ctos_buffer);
}));
};
if (client.isWs) {
client.on('message', dataHandler);
client.on('message', queuedDataHandler);
} else {
client.on('data', dataHandler);
client.on('data', queuedDataHandler);
}
// 服务端到客户端(stoc)
server.on('data', async function(stoc_buffer) {
serverDataHandler = async function(stoc_buffer) {
var buffer, handle_data, j, len, ref;
handle_data = (await ygopro.helper.handleBuffer(stoc_buffer, "STOC", null, {
client: server.client,
......@@ -3037,7 +3053,16 @@
await ygopro.helper.send(server.client, buffer);
}
}
});
};
queuedServerDataHandler = async function(stoc_buffer) {
if (server.isClosed) {
return;
}
return (await server_data_queue.add(function() {
return serverDataHandler(stoc_buffer);
}));
};
server.on('data', queuedServerDataHandler);
};
deck_name_match = global.deck_name_match = function(deck_name, player_name) {
......
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