Skip to content

Commit 2f81de5

Browse files
authored
Merge pull request #305 from GuoWQ222/dev
fix bugs
2 parents 6b2a3c8 + 7cc5593 commit 2f81de5

File tree

2 files changed

+85
-27
lines changed

2 files changed

+85
-27
lines changed

logic/Server/GameServer.cs

+42-24
Original file line numberDiff line numberDiff line change
@@ -111,42 +111,44 @@ private void SaveGameResult(string path)
111111

112112
protected void SendGameResult(int[] scores, int mode) // 天梯的 Server 给网站发消息记录比赛结果
113113
{
114+
string? url2 = Environment.GetEnvironmentVariable("FINISH_URL");
115+
if (url2 == null)
116+
{
117+
GameServerLogging.logger.ConsoleLog("Null FINISH_URL!");
118+
return;
119+
}
120+
else
121+
{
122+
httpSender.Url = url2;
123+
httpSender.Token = options.Token;
124+
}
114125
httpSender?.SendHttpRequest(scores, mode).Wait();
115-
116126
}
117127

118-
protected async Task<double[]> GetLadderScore(double[] scores)
128+
protected double[] PullScore(double[] scores)
119129
{
120130

121131
string? url2 = Environment.GetEnvironmentVariable("SCORE_URL");
122132
if (url2 != null)
123133
{
124-
try
134+
httpSender.Url = url2;
135+
httpSender.Token = options.Token;
136+
double[] org = httpSender.GetLadderScore(scores).Result;
137+
if (org.Length == 0)
125138
{
126-
var httpClient = new HttpClient();
127-
httpClient.DefaultRequestHeaders.Authorization = new("Bearer", options.Token);
128-
var response = await httpClient.PostAsync(url2, JsonContent.Create(new { HttpHeaders = options.Token }));
129-
130-
// 读取响应内容为字符串
131-
var jsonString = await response.Content.ReadAsStringAsync();
132-
133-
// 解析 JSON 字符串
134-
var result = JsonConvert.DeserializeObject<List<ContestResult>>(jsonString);
135-
double[] org = (from r in result select (double)(r.score)).ToArray();
136-
double[] final = LadderCalculate(org, scores);
137-
return final;
139+
GameServerLogging.logger.ConsoleLog("Error: No data returned from the web!");
140+
return new double[0];
138141
}
139-
catch (Exception e)
142+
else
140143
{
141-
GameServerLogging.logger.ConsoleLog("No response from ladder URL!");
142-
GameServerLogging.logger.ConsoleLog(e.ToString());
143-
return [];
144+
double[] final = LadderCalculate(org, scores);
145+
return final;
144146
}
145147
}
146148
else
147149
{
148-
GameServerLogging.logger.ConsoleLog("Null URL!");
149-
return [];
150+
GameServerLogging.logger.ConsoleLog("Null SCORE_URL Environment!");
151+
return new double[0];
150152
}
151153
}
152154

@@ -212,9 +214,15 @@ private void OnGameEnd()
212214
double[] doubleArray = scores.Select(x => (double)x).ToArray();
213215
if (options.Mode == 2)
214216
{
215-
doubleArray = GetLadderScore(doubleArray).Result;
217+
doubleArray = PullScore(doubleArray);
216218
scores = doubleArray.Select(x => (int)x).ToArray();
217-
SendGameResult(scores, options.Mode);
219+
if (scores.Length == 0)
220+
{
221+
Console.WriteLine("Error: No data returned from the web!");
222+
223+
}
224+
else
225+
SendGameResult(scores, options.Mode);
218226
}
219227
endGameSem.Release();
220228
}
@@ -453,11 +461,21 @@ public GameServer(ArgumentOptions options)
453461
}
454462
}
455463

456-
464+
string? token2 = Environment.GetEnvironmentVariable("TOKEN");
465+
if (token2 == null)
466+
{
467+
GameServerLogging.logger.ConsoleLog("Null TOKEN Environment!");
468+
}
469+
else
470+
options.Token = token2;
457471
if (options.Url != DefaultArgumentOptions.Url && options.Token != DefaultArgumentOptions.Token)
458472
{
459473
httpSender = new(options.Url, options.Token);
460474
}
475+
else
476+
{
477+
httpSender = new(DefaultArgumentOptions.Url, DefaultArgumentOptions.Token);
478+
}
461479
}
462480
}
463481
}

logic/Server/HttpSender.cs

+43-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,25 @@
1-
using System.Net.Http.Json;
1+
using Google.Protobuf.WellKnownTypes;
2+
using Newtonsoft.Json;
3+
using System.Net.Http.Json;
24

35
namespace Server
46
{
57
class HttpSender(string url, string token)
68
{
7-
private readonly string url = url;
8-
private readonly string token = token;
9+
private string url = url;
10+
private string token = token;
11+
12+
public string Url
13+
{
14+
get { return url; }
15+
set { url = value; }
16+
}
17+
18+
public string Token
19+
{
20+
get { return token; }
21+
set { token = value; }
22+
}
923

1024
// void Test()
1125
// {
@@ -35,6 +49,32 @@ public async Task SendHttpRequest(int[] scores, int mode)
3549
GameServerLogging.logger.ConsoleLog(e.ToString());
3650
}
3751
}
52+
53+
public async Task<double[]> GetLadderScore(double[] scores)
54+
{
55+
56+
try
57+
{
58+
var httpClient = new HttpClient();
59+
httpClient.DefaultRequestHeaders.Authorization = new("Bearer", token);
60+
var response = await httpClient.PostAsync(url, JsonContent.Create(new { HttpHeaders = token }));
61+
62+
// 读取响应内容为字符串
63+
var jsonString = await response.Content.ReadAsStringAsync();
64+
65+
// 解析 JSON 字符串
66+
var result = JsonConvert.DeserializeObject<List<ContestResult>>(jsonString);
67+
double[] org = (from r in result select (double)(r.score)).ToArray();
68+
return org;
69+
}
70+
catch (Exception e)
71+
{
72+
GameServerLogging.logger.ConsoleLog("Error when pulling ladder score!");
73+
GameServerLogging.logger.ConsoleLog(e.ToString());
74+
return new double[0];
75+
}
76+
77+
}
3878
}
3979

4080
internal class TeamScore

0 commit comments

Comments
 (0)