Commit 61edb8d2 authored by nanahira's avatar nanahira

Merge branch 'master' into develop

parents 7b99c0d5 b9ab979a
Pipeline #38057 failed with stages
in 6 minutes and 5 seconds
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.retry = retry;
async function retry(fn, count, delayFn = (attempt) => Math.pow(2, attempt) * 1000) {
let lastError;
for (let attempt = 0; attempt < count; attempt++) {
try {
return await fn();
}
catch (error) {
lastError = error;
if (attempt < count - 1) {
const delay = delayFn(attempt);
await new Promise((resolve) => setTimeout(resolve, delay));
}
}
}
// 如果全部尝试失败,抛出最后一个错误
throw lastError;
}
export async function retry<T>(
fn: () => Promise<T>,
count: number,
delayFn: (attempt: number) => number = (attempt) => Math.pow(2, attempt) * 1000
): Promise<T> {
let lastError: any;
for (let attempt = 0; attempt < count; attempt++) {
try {
return await fn();
} catch (error) {
lastError = error;
if (attempt < count - 1) {
const delay = delayFn(attempt);
await new Promise((resolve) => setTimeout(resolve, delay));
}
}
}
// 如果全部尝试失败,抛出最后一个错误
throw lastError;
}
...@@ -12,6 +12,9 @@ spawn = require('child_process').spawn ...@@ -12,6 +12,9 @@ spawn = require('child_process').spawn
spawnSync = require('child_process').spawnSync spawnSync = require('child_process').spawnSync
_async = require('async') _async = require('async')
# ts utility
utility = require './utility.js'
# 三方库 # 三方库
_ = global._ = require 'underscore' _ = global._ = require 'underscore'
_.str = require 'underscore.string' _.str = require 'underscore.string'
...@@ -1515,28 +1518,36 @@ class Room ...@@ -1515,28 +1518,36 @@ class Room
formatted_replays = [] formatted_replays = []
for repbuf in @replays when repbuf for repbuf in @replays when repbuf
formatted_replays.push(repbuf.toString("base64")) formatted_replays.push(repbuf.toString("base64"))
request.post { url : settings.modules.arena_mode.post_score , form : { form_data = new URLSearchParams
accesskey: settings.modules.arena_mode.accesskey, form_data.append 'accesskey', settings.modules.arena_mode.accesskey
usernameA: score_array[0].name, form_data.append 'usernameA', score_array[0].name
usernameB: score_array[1].name, form_data.append 'usernameB', score_array[1].name
userscoreA: score_array[0].score, form_data.append 'userscoreA', score_array[0].score
userscoreB: score_array[1].score, form_data.append 'userscoreB', score_array[1].score
userdeckA: score_array[0].deck, form_data.append 'userdeckA', score_array[0].deck
userdeckB: score_array[1].deck, form_data.append 'userdeckB', score_array[1].deck
first: JSON.stringify(@first_list), form_data.append 'first', JSON.stringify @first_list
replays: JSON.stringify(formatted_replays), form_data.append 'replays', JSON.stringify formatted_replays
start: @start_time, form_data.append 'start', @start_time
end: end_time, form_data.append 'end', end_time
arena: @arena form_data.append 'arena', @arena
}}, (error, response, body)=>
if error post_score_process = () ->
log.warn 'SCORE POST ERROR', error axios.post settings.modules.arena_mode.post_score, form_data,
validateStatus: (status) -> status < 400
headers:
'Content-Type': 'application/x-www-form-urlencoded'
utility.retry post_match_scores, 10
.then (response) =>
log.info 'SCORE POST OK', response.status, response.statusText, @name, response.data
.catch (error) =>
if error.response?
log.warn 'SCORE POST FAIL', error.response.status, error.response.statusText, @name, error.response.data
else else
if response.statusCode >= 300 log.warn 'SCORE POST ERROR', error.message
log.warn 'SCORE POST FAIL', response.statusCode, response.statusMessage, @name, body
#else
# log.info 'SCORE POST OK', response.statusCode, response.statusMessage, @name, body
return
if settings.modules.challonge.enabled and @duel_stage != ygopro.constants.DUEL_STAGE.BEGIN and @hostinfo.mode != 2 and !@kicked if settings.modules.challonge.enabled and @duel_stage != ygopro.constants.DUEL_STAGE.BEGIN and @hostinfo.mode != 2 and !@kicked
room_name = @name room_name = @name
......
// Generated by CoffeeScript 2.7.0 // Generated by CoffeeScript 2.7.0
(function() { (function() {
// 标准库 // 标准库
var Aragami, CLIENT_get_absolute_pos, CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, CLIENT_get_partner, 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_set_ip, 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, YGOProDeck, _, _async, addCallback, aragami, aragami_classes, athleticChecker, auth, axios, badwordR, badwords, ban_user, bunyan, challonge, checkFileExists, 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_tips, 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, wait_room_start, wait_room_start_arena, windbot_looplimit, windbot_process, windbots, ygopro, zlib; var Aragami, CLIENT_get_absolute_pos, CLIENT_get_authorize_key, CLIENT_get_kick_reconnect_target, CLIENT_get_partner, 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_set_ip, 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, YGOProDeck, _, _async, addCallback, aragami, aragami_classes, athleticChecker, auth, axios, badwordR, badwords, ban_user, bunyan, challonge, checkFileExists, 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_tips, 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, ygopro, zlib;
net = require('net'); net = require('net');
...@@ -27,6 +27,9 @@ ...@@ -27,6 +27,9 @@
_async = require('async'); _async = require('async');
// ts utility
utility = require('./utility.js');
// 三方库 // 三方库
_ = global._ = require('underscore'); _ = global._ = require('underscore');
...@@ -1917,7 +1920,7 @@ ...@@ -1917,7 +1920,7 @@
} }
delete() { delete() {
var end_time, formatted_replays, index, j, len, log_rep_id, name, name_vpass, player_datas, recorder_buffer, ref, ref1, repbuf, replay_id, room_name, score, score_array, score_form; var end_time, form_data, formatted_replays, index, j, len, log_rep_id, name, name_vpass, player_datas, post_score_process, recorder_buffer, ref, ref1, repbuf, replay_id, room_name, score, score_array, score_form;
if (this.deleted) { if (this.deleted) {
return; return;
} }
...@@ -1988,34 +1991,39 @@ ...@@ -1988,34 +1991,39 @@
formatted_replays.push(repbuf.toString("base64")); formatted_replays.push(repbuf.toString("base64"));
} }
} }
request.post({ form_data = new URLSearchParams();
url: settings.modules.arena_mode.post_score, form_data.append('accesskey', settings.modules.arena_mode.accesskey);
form: { form_data.append('usernameA', score_array[0].name);
accesskey: settings.modules.arena_mode.accesskey, form_data.append('usernameB', score_array[1].name);
usernameA: score_array[0].name, form_data.append('userscoreA', score_array[0].score);
usernameB: score_array[1].name, form_data.append('userscoreB', score_array[1].score);
userscoreA: score_array[0].score, form_data.append('userdeckA', score_array[0].deck);
userscoreB: score_array[1].score, form_data.append('userdeckB', score_array[1].deck);
userdeckA: score_array[0].deck, form_data.append('first', JSON.stringify(this.first_list));
userdeckB: score_array[1].deck, form_data.append('replays', JSON.stringify(formatted_replays));
first: JSON.stringify(this.first_list), form_data.append('start', this.start_time);
replays: JSON.stringify(formatted_replays), form_data.append('end', end_time);
start: this.start_time, form_data.append('arena', this.arena);
end: end_time, post_score_process = function() {
arena: this.arena return axios.post(settings.modules.arena_mode.post_score, form_data, {
} validateStatus: function(status) {
}, (error, response, body) => { return status < 400;
if (error) { },
log.warn('SCORE POST ERROR', error); headers: {
} else { 'Content-Type': 'application/x-www-form-urlencoded'
if (response.statusCode >= 300) {
log.warn('SCORE POST FAIL', response.statusCode, response.statusMessage, this.name, body);
} }
});
};
utility.retry(post_match_scores, 10).then((response) => {
return log.info('SCORE POST OK', response.status, response.statusText, this.name, response.data);
}).catch((error) => {
if (error.response != null) {
return log.warn('SCORE POST FAIL', error.response.status, error.response.statusText, this.name, error.response.data);
} else {
return log.warn('SCORE POST ERROR', error.message);
} }
}); });
} }
//else
// log.info 'SCORE POST OK', response.statusCode, response.statusMessage, @name, body
if (settings.modules.challonge.enabled && this.duel_stage !== ygopro.constants.DUEL_STAGE.BEGIN && this.hostinfo.mode !== 2 && !this.kicked) { if (settings.modules.challonge.enabled && this.duel_stage !== ygopro.constants.DUEL_STAGE.BEGIN && this.hostinfo.mode !== 2 && !this.kicked) {
room_name = this.name; room_name = this.name;
this.post_challonge_score(); this.post_challonge_score();
......
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