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
spawnSync = require('child_process').spawnSync
_async = require('async')
# ts utility
utility = require './utility.js'
# 三方库
_ = global._ = require 'underscore'
_.str = require 'underscore.string'
......@@ -1515,28 +1518,36 @@ class Room
formatted_replays = []
for repbuf in @replays when repbuf
formatted_replays.push(repbuf.toString("base64"))
request.post { url : settings.modules.arena_mode.post_score , form : {
accesskey: settings.modules.arena_mode.accesskey,
usernameA: score_array[0].name,
usernameB: score_array[1].name,
userscoreA: score_array[0].score,
userscoreB: score_array[1].score,
userdeckA: score_array[0].deck,
userdeckB: score_array[1].deck,
first: JSON.stringify(@first_list),
replays: JSON.stringify(formatted_replays),
start: @start_time,
end: end_time,
arena: @arena
}}, (error, response, body)=>
if error
log.warn 'SCORE POST ERROR', error
form_data = new URLSearchParams
form_data.append 'accesskey', settings.modules.arena_mode.accesskey
form_data.append 'usernameA', score_array[0].name
form_data.append 'usernameB', score_array[1].name
form_data.append 'userscoreA', score_array[0].score
form_data.append 'userscoreB', score_array[1].score
form_data.append 'userdeckA', score_array[0].deck
form_data.append 'userdeckB', score_array[1].deck
form_data.append 'first', JSON.stringify @first_list
form_data.append 'replays', JSON.stringify formatted_replays
form_data.append 'start', @start_time
form_data.append 'end', end_time
form_data.append 'arena', @arena
post_score_process = () ->
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
if response.statusCode >= 300
log.warn 'SCORE POST FAIL', response.statusCode, response.statusMessage, @name, body
#else
# log.info 'SCORE POST OK', response.statusCode, response.statusMessage, @name, body
return
log.warn 'SCORE POST ERROR', error.message
if settings.modules.challonge.enabled and @duel_stage != ygopro.constants.DUEL_STAGE.BEGIN and @hostinfo.mode != 2 and !@kicked
room_name = @name
......
// Generated by CoffeeScript 2.7.0
(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');
......@@ -27,6 +27,9 @@
_async = require('async');
// ts utility
utility = require('./utility.js');
// 三方库
_ = global._ = require('underscore');
......@@ -1917,7 +1920,7 @@
}
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) {
return;
}
......@@ -1988,34 +1991,39 @@
formatted_replays.push(repbuf.toString("base64"));
}
}
request.post({
url: settings.modules.arena_mode.post_score,
form: {
accesskey: settings.modules.arena_mode.accesskey,
usernameA: score_array[0].name,
usernameB: score_array[1].name,
userscoreA: score_array[0].score,
userscoreB: score_array[1].score,
userdeckA: score_array[0].deck,
userdeckB: score_array[1].deck,
first: JSON.stringify(this.first_list),
replays: JSON.stringify(formatted_replays),
start: this.start_time,
end: end_time,
arena: this.arena
}
}, (error, response, body) => {
if (error) {
log.warn('SCORE POST ERROR', error);
} else {
if (response.statusCode >= 300) {
log.warn('SCORE POST FAIL', response.statusCode, response.statusMessage, this.name, body);
form_data = new URLSearchParams();
form_data.append('accesskey', settings.modules.arena_mode.accesskey);
form_data.append('usernameA', score_array[0].name);
form_data.append('usernameB', score_array[1].name);
form_data.append('userscoreA', score_array[0].score);
form_data.append('userscoreB', score_array[1].score);
form_data.append('userdeckA', score_array[0].deck);
form_data.append('userdeckB', score_array[1].deck);
form_data.append('first', JSON.stringify(this.first_list));
form_data.append('replays', JSON.stringify(formatted_replays));
form_data.append('start', this.start_time);
form_data.append('end', end_time);
form_data.append('arena', this.arena);
post_score_process = function() {
return axios.post(settings.modules.arena_mode.post_score, form_data, {
validateStatus: function(status) {
return status < 400;
},
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
};
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) {
room_name = this.name;
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