mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-12 23:14:34 +01:00
refactoring part 3, improve logging
This commit is contained in:
@@ -96,7 +96,6 @@ namespace EpinelPS.Controllers
|
|||||||
return "{}";
|
return "{}";
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("Requesting gameId: " + body.game_id);
|
|
||||||
return System.IO.File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "gameversion.json"));
|
return System.IO.File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "gameversion.json"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using EpinelPS.LobbyServer;
|
using EpinelPS.LobbyServer;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using EpinelPS.Utils;
|
||||||
|
|
||||||
namespace EpinelPS.Controllers
|
namespace EpinelPS.Controllers
|
||||||
{
|
{
|
||||||
@@ -24,7 +25,7 @@ namespace EpinelPS.Controllers
|
|||||||
else
|
else
|
||||||
Console.ForegroundColor = ConsoleColor.Red;
|
Console.ForegroundColor = ConsoleColor.Red;
|
||||||
|
|
||||||
Console.WriteLine("POST " + HttpContext.Request.Path.Value + " completed in " + st.Elapsed + "with result " + HttpContext.Response.StatusCode);
|
Logging.WriteLine("POST " + HttpContext.Request.Path.Value + " completed in " + st.Elapsed + " with result " + HttpContext.Response.StatusCode, LogType.InfoSuccess);
|
||||||
|
|
||||||
Console.ForegroundColor = fg;
|
Console.ForegroundColor = fg;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -168,13 +168,13 @@ namespace EpinelPS.Data
|
|||||||
{
|
{
|
||||||
await Load();
|
await Load();
|
||||||
|
|
||||||
Console.WriteLine("Preparing");
|
Logging.WriteLine("Preparing");
|
||||||
var stopWatch = new Stopwatch();
|
var stopWatch = new Stopwatch();
|
||||||
stopWatch.Start();
|
stopWatch.Start();
|
||||||
await Instance.Parse();
|
await Instance.Parse();
|
||||||
|
|
||||||
stopWatch.Stop();
|
stopWatch.Stop();
|
||||||
Console.WriteLine("Preparing took " + stopWatch.Elapsed);
|
Logging.WriteLine("Preparing took " + stopWatch.Elapsed);
|
||||||
return Instance;
|
return Instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -582,6 +582,7 @@ namespace EpinelPS.Database
|
|||||||
public string ServerName = "<color=\"green\">Private Server</color>";
|
public string ServerName = "<color=\"green\">Private Server</color>";
|
||||||
public byte[] LauncherTokenKey = [];
|
public byte[] LauncherTokenKey = [];
|
||||||
public byte[] EncryptionTokenKey = [];
|
public byte[] EncryptionTokenKey = [];
|
||||||
|
public LogType LogLevel = LogType.Debug;
|
||||||
}
|
}
|
||||||
internal class JsonDb
|
internal class JsonDb
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace EpinelPS.LobbyServer.Campaign
|
|||||||
|
|
||||||
if (chapter == -1)
|
if (chapter == -1)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Warning: unknown chapter id for " + req.MapId);
|
Logging.WriteLine("Warning: unknown chapter id for " + req.MapId, LogType.Warning);
|
||||||
key = req.MapId;
|
key = req.MapId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ namespace EpinelPS.LobbyServer.Campaign
|
|||||||
{
|
{
|
||||||
if (item.PositionId == req.FieldObject.PositionId)
|
if (item.PositionId == req.FieldObject.PositionId)
|
||||||
{
|
{
|
||||||
Console.WriteLine("attempted to collect campaign field object twice!");
|
Logging.WriteLine("attempted to collect campaign field object twice!", LogType.WarningAntiCheat);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,11 +12,9 @@ namespace EpinelPS.LobbyServer.Campaign
|
|||||||
var req = await ReadData<ReqSaveCampaignFieldObject>();
|
var req = await ReadData<ReqSaveCampaignFieldObject>();
|
||||||
var user = GetUser();
|
var user = GetUser();
|
||||||
|
|
||||||
Console.WriteLine("Map ID: " + req.MapId);
|
|
||||||
|
|
||||||
var response = new ResSaveCampaignFieldObject();
|
var response = new ResSaveCampaignFieldObject();
|
||||||
|
|
||||||
Console.WriteLine($"save {req.MapId} with {req.FieldObject.PositionId}");
|
Logging.WriteLine($"save {req.MapId} with {req.FieldObject.PositionId}", LogType.Debug);
|
||||||
|
|
||||||
var chapter = GameData.Instance.GetNormalChapterNumberFromFieldName(req.MapId);
|
var chapter = GameData.Instance.GetNormalChapterNumberFromFieldName(req.MapId);
|
||||||
var mod = req.MapId.Contains("hard") ? "Hard" : "Normal";
|
var mod = req.MapId.Contains("hard") ? "Hard" : "Normal";
|
||||||
|
|||||||
@@ -40,8 +40,7 @@ namespace EpinelPS.LobbyServer.Character
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TOOD: log this
|
Logging.WriteLine("ERROR: Not enough currency for upgrade", LogType.WarningAntiCheat);
|
||||||
Console.WriteLine("ERROR: Not enough currency for upgrade");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,12 +20,12 @@ namespace EpinelPS.LobbyServer.Character
|
|||||||
{
|
{
|
||||||
if (item.Level == 1)
|
if (item.Level == 1)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Character level is already 1 - cannot reset");
|
Logging.WriteLine("Character level is already 1 - cannot reset", LogType.WarningAntiCheat);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (item.Level == 200)
|
if (item.Level == 200)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Character level is 200 - cannot reset");
|
Logging.WriteLine("Character level is 200 - cannot reset", LogType.WarningAntiCheat);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,14 +19,13 @@ namespace EpinelPS.LobbyServer.Character
|
|||||||
{
|
{
|
||||||
if (item.CharacterSerialNumber == 0)
|
if (item.CharacterSerialNumber == 0)
|
||||||
{
|
{
|
||||||
Console.WriteLine("must add character from synchrodevice first");
|
Logging.WriteLine("must add character from synchrodevice first", LogType.Warning);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var oldCSN = item.CharacterSerialNumber;
|
var oldCSN = item.CharacterSerialNumber;
|
||||||
item.CharacterSerialNumber = 0;
|
item.CharacterSerialNumber = 0;
|
||||||
var data = user.GetCharacterBySerialNumber(oldCSN);
|
var data = user.GetCharacterBySerialNumber(oldCSN) ?? throw new Exception("failed to lookup character");
|
||||||
if (data == null) throw new Exception("failed to lookup character");
|
|
||||||
|
|
||||||
response.Character = new NetUserCharacterDefaultData()
|
response.Character = new NetUserCharacterDefaultData()
|
||||||
{
|
{
|
||||||
|
|||||||
16
EpinelPS/LobbyServer/EmptyHandler.cs
Normal file
16
EpinelPS/LobbyServer/EmptyHandler.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
using Google.Protobuf.WellKnownTypes;
|
||||||
|
using EpinelPS.Utils;
|
||||||
|
|
||||||
|
namespace EpinelPS.LobbyServer
|
||||||
|
{
|
||||||
|
public class EmptyHandler : LobbyMsgHandler
|
||||||
|
{
|
||||||
|
protected override async Task HandleAsync()
|
||||||
|
{
|
||||||
|
var req = await ReadData<ReqGetNow>();
|
||||||
|
var response = new ResGetNow();
|
||||||
|
|
||||||
|
await WriteDataAsync(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
18
EpinelPS/LobbyServer/Event/StoryEvent/EnterStage.cs
Normal file
18
EpinelPS/LobbyServer/Event/StoryEvent/EnterStage.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
using EpinelPS.Utils;
|
||||||
|
using EpinelPS.Database;
|
||||||
|
|
||||||
|
namespace EpinelPS.LobbyServer.Event.EventStory
|
||||||
|
{
|
||||||
|
[PacketPath("/event/storydungeon/enterstage")]
|
||||||
|
public class EnterEventStoryStage : LobbyMsgHandler
|
||||||
|
{
|
||||||
|
protected override async Task HandleAsync()
|
||||||
|
{
|
||||||
|
var req = await ReadData<ReqEnterEventStage>();
|
||||||
|
var user = GetUser();
|
||||||
|
var response = new ResEnterEventStage();
|
||||||
|
|
||||||
|
await WriteDataAsync(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,8 @@ using Google.Protobuf;
|
|||||||
using Paseto.Builder;
|
using Paseto.Builder;
|
||||||
using Paseto;
|
using Paseto;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using EpinelPS.LobbyServer.Stage;
|
||||||
|
using EpinelPS.LobbyServer.Event.EventStory;
|
||||||
|
|
||||||
namespace EpinelPS.LobbyServer
|
namespace EpinelPS.LobbyServer
|
||||||
{
|
{
|
||||||
@@ -20,7 +22,7 @@ namespace EpinelPS.LobbyServer
|
|||||||
var attrib = (PacketPathAttribute?)Attribute.GetCustomAttribute(type, typeof(PacketPathAttribute));
|
var attrib = (PacketPathAttribute?)Attribute.GetCustomAttribute(type, typeof(PacketPathAttribute));
|
||||||
if (attrib == null)
|
if (attrib == null)
|
||||||
{
|
{
|
||||||
Console.WriteLine("WARNING: Failed to get attribute for " + type.FullName);
|
Logging.WriteLine("WARNING: Failed to get attribute for " + type.FullName, LogType.Warning);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,7 +34,7 @@ namespace EpinelPS.LobbyServer
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine($"WARNING: Type {type.FullName} has PacketPathAttribute but does not implement LobbyMsgHandler");
|
Logging.WriteLine($"WARNING: Type {type.FullName} has PacketPathAttribute but does not implement LobbyMsgHandler", LogType.Warning);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -54,8 +56,13 @@ namespace EpinelPS.LobbyServer
|
|||||||
|
|
||||||
if (handler == null)
|
if (handler == null)
|
||||||
{
|
{
|
||||||
Console.WriteLine("404: " + path);
|
Logging.WriteLine("HANDLER NOT FOUND: " + path, LogType.Error);
|
||||||
ctx.Response.StatusCode = 404;
|
//ctx.Response.StatusCode = 404;
|
||||||
|
|
||||||
|
// to prevent "reloading" of the game for now, return empty response
|
||||||
|
// this may cause more problems later on
|
||||||
|
|
||||||
|
await new EmptyHandler().HandleAsync(ctx);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -61,13 +61,13 @@ namespace EpinelPS.LobbyServer
|
|||||||
{
|
{
|
||||||
var str = (string?)data.GetType().InvokeMember("ToString", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod, null, data, null);
|
var str = (string?)data.GetType().InvokeMember("ToString", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.InvokeMethod, null, data, null);
|
||||||
if (str != null)
|
if (str != null)
|
||||||
Console.WriteLine(str);
|
Logging.WriteLine(str, LogType.Debug);
|
||||||
}
|
}
|
||||||
protected async Task WriteDataAsync<T>(T data) where T : IMessage, new()
|
protected async Task WriteDataAsync<T>(T data) where T : IMessage, new()
|
||||||
{
|
{
|
||||||
Console.WriteLine("Writing " + data.GetType().Name);
|
Logging.WriteLine("Writing " + data.GetType().Name, LogType.Debug);
|
||||||
PrintMessage(data);
|
PrintMessage(data);
|
||||||
Console.WriteLine();
|
Logging.WriteLine("", LogType.Debug);
|
||||||
|
|
||||||
if (ctx == null)
|
if (ctx == null)
|
||||||
{
|
{
|
||||||
@@ -110,13 +110,13 @@ namespace EpinelPS.LobbyServer
|
|||||||
{
|
{
|
||||||
// return grpc IMessage from byte array with type T
|
// return grpc IMessage from byte array with type T
|
||||||
T msg = new();
|
T msg = new();
|
||||||
Console.WriteLine("Reading " + msg.GetType().Name);
|
Logging.WriteLine("Reading " + msg.GetType().Name, LogType.Debug);
|
||||||
|
|
||||||
var bin = await PacketDecryption.DecryptOrReturnContentAsync(ctx);
|
var bin = await PacketDecryption.DecryptOrReturnContentAsync(ctx);
|
||||||
msg.MergeFrom(bin.Contents);
|
msg.MergeFrom(bin.Contents);
|
||||||
|
|
||||||
PrintMessage(msg);
|
PrintMessage(msg);
|
||||||
Console.WriteLine();
|
Logging.WriteLine("", LogType.Debug);
|
||||||
|
|
||||||
UserId = bin.UserId;
|
UserId = bin.UserId;
|
||||||
UsedAuthToken = bin.UsedAuthToken;
|
UsedAuthToken = bin.UsedAuthToken;
|
||||||
|
|||||||
@@ -17,13 +17,11 @@ namespace EpinelPS.LobbyServer.LobbyUser
|
|||||||
|
|
||||||
foreach (var item in req.ScenarioGroupIds)
|
foreach (var item in req.ScenarioGroupIds)
|
||||||
{
|
{
|
||||||
Console.WriteLine("check scenario " + item);
|
|
||||||
foreach (var completed in user.CompletedScenarios)
|
foreach (var completed in user.CompletedScenarios)
|
||||||
{
|
{
|
||||||
// story thingy was completed
|
// story thingy was completed
|
||||||
if (completed == item)
|
if (completed == item)
|
||||||
{
|
{
|
||||||
Console.WriteLine(item + " is completed");
|
|
||||||
response.ExistGroupIds.Add(item);
|
response.ExistGroupIds.Add(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ namespace EpinelPS.LobbyServer.Messenger
|
|||||||
|
|
||||||
if (msgToSave.Value.reward_id != 0)
|
if (msgToSave.Value.reward_id != 0)
|
||||||
{
|
{
|
||||||
Console.WriteLine("TODO reward for messenger. Reward ID: " + msgToSave.Value.reward_id + " Message ID: " + req.MessageId);
|
Logging.WriteLine("TODO reward for messenger. Reward ID: " + msgToSave.Value.reward_id + " Message ID: " + req.MessageId, LogType.Warning);
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonDb.Save();
|
JsonDb.Save();
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ namespace EpinelPS.LobbyServer.Shop
|
|||||||
|
|
||||||
if (!decimal.TryParse(normalizedCost, NumberStyles.Any, CultureInfo.InvariantCulture, out decimal price))
|
if (!decimal.TryParse(normalizedCost, NumberStyles.Any, CultureInfo.InvariantCulture, out decimal price))
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Failed to parse '{record.cost}' (normalized as '{normalizedCost}'). Cash shop will not work properly.");
|
Logging.WriteLine($"Failed to parse '{record.cost}' (normalized as '{normalizedCost}'). Cash shop will not work properly.", LogType.Error);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,10 +11,6 @@ namespace EpinelPS.LobbyServer.Wallet
|
|||||||
var user = GetUser();
|
var user = GetUser();
|
||||||
|
|
||||||
var response = new ResGetCurrencyData();
|
var response = new ResGetCurrencyData();
|
||||||
foreach (var item in req.Currencies)
|
|
||||||
{
|
|
||||||
Console.WriteLine("Request currency " + (CurrencyType)item);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var currency in user.Currency)
|
foreach (var currency in user.Currency)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,10 +26,10 @@ namespace EpinelPS
|
|||||||
|
|
||||||
GameData.Instance.GetAllCostumes(); // force static data to be loaded
|
GameData.Instance.GetAllCostumes(); // force static data to be loaded
|
||||||
|
|
||||||
Console.WriteLine("Register handlers");
|
Logging.WriteLine("Register handlers");
|
||||||
LobbyHandler.Init();
|
LobbyHandler.Init();
|
||||||
|
|
||||||
Console.WriteLine("Starting ASP.NET core on port 443");
|
Logging.WriteLine("Starting ASP.NET core on port 443");
|
||||||
new Thread(() =>
|
new Thread(() =>
|
||||||
{
|
{
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
@@ -1063,7 +1063,7 @@ namespace EpinelPS
|
|||||||
url = url.Replace("/v1", "");
|
url = url.Replace("/v1", "");
|
||||||
|
|
||||||
// find appropriate handler
|
// find appropriate handler
|
||||||
Console.WriteLine("BATCH: /v1" + url);
|
Logging.WriteLine("BATCH: /v1" + url, LogType.Info);
|
||||||
|
|
||||||
foreach (var item in LobbyHandler.Handlers)
|
foreach (var item in LobbyHandler.Handlers)
|
||||||
{
|
{
|
||||||
@@ -1076,10 +1076,8 @@ namespace EpinelPS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var fg = Console.ForegroundColor;
|
Logging.WriteLine("Handler not found: " + url, LogType.Error);
|
||||||
Console.ForegroundColor = ConsoleColor.Red;
|
|
||||||
Console.WriteLine("HANDLER NOT FOUND: " + url);
|
|
||||||
Console.ForegroundColor = fg;
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
using Google.Protobuf;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
namespace EpinelPS.Utils
|
|
||||||
{
|
|
||||||
public static class LogUtils
|
|
||||||
{
|
|
||||||
public static void LogMessageFields(IMessage message)
|
|
||||||
{
|
|
||||||
Type type = message.GetType();
|
|
||||||
FieldInfo[] fields = type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
|
|
||||||
|
|
||||||
Console.ForegroundColor = ConsoleColor.Cyan;
|
|
||||||
|
|
||||||
Console.WriteLine(type.Name + ":");
|
|
||||||
|
|
||||||
foreach (FieldInfo field in fields)
|
|
||||||
{
|
|
||||||
if (field.Name.ToLower().Contains("unknown"))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
object? value = field.GetValue(message);
|
|
||||||
|
|
||||||
Console.WriteLine($"\t{field.Name}: {value}");
|
|
||||||
}
|
|
||||||
|
|
||||||
Console.ResetColor();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
46
EpinelPS/Utils/Logging.cs
Normal file
46
EpinelPS/Utils/Logging.cs
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
using EpinelPS.Database;
|
||||||
|
|
||||||
|
namespace EpinelPS.Utils
|
||||||
|
{
|
||||||
|
public class Logging
|
||||||
|
{
|
||||||
|
public static void WriteLine(string msg, LogType level = LogType.Info)
|
||||||
|
{
|
||||||
|
var originalFG = Console.ForegroundColor;
|
||||||
|
Console.ForegroundColor = GetColorForLevel(level);
|
||||||
|
|
||||||
|
// todo write to some file
|
||||||
|
|
||||||
|
|
||||||
|
if (JsonDb.Instance.LogLevel <= level)
|
||||||
|
Console.WriteLine(msg);
|
||||||
|
|
||||||
|
Console.ForegroundColor = originalFG;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ConsoleColor GetColorForLevel(LogType level)
|
||||||
|
{
|
||||||
|
switch (level)
|
||||||
|
{
|
||||||
|
case LogType.Debug: return ConsoleColor.DarkGray;
|
||||||
|
case LogType.Info: return ConsoleColor.Gray;
|
||||||
|
case LogType.InfoSuccess: return ConsoleColor.Green;
|
||||||
|
case LogType.Warning: return ConsoleColor.Yellow;
|
||||||
|
case LogType.WarningAntiCheat: return ConsoleColor.DarkMagenta;
|
||||||
|
case LogType.Error: return ConsoleColor.Red;
|
||||||
|
default: return ConsoleColor.White;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum LogType
|
||||||
|
{
|
||||||
|
Debug,
|
||||||
|
InfoSuccess,
|
||||||
|
Info,
|
||||||
|
Warning,
|
||||||
|
WarningAntiCheat,
|
||||||
|
Error
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
namespace EpinelPS.Utils
|
|
||||||
{
|
|
||||||
public class LoggingHttpHandler(HttpMessageHandler innerHandler) : DelegatingHandler(innerHandler)
|
|
||||||
{
|
|
||||||
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
Console.WriteLine("Request:");
|
|
||||||
Console.WriteLine(request.ToString());
|
|
||||||
if (request.Content != null)
|
|
||||||
{
|
|
||||||
Console.WriteLine(await request.Content.ReadAsStringAsync(cancellationToken));
|
|
||||||
}
|
|
||||||
Console.WriteLine();
|
|
||||||
|
|
||||||
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
|
|
||||||
|
|
||||||
Console.WriteLine("Response:");
|
|
||||||
Console.WriteLine(response.ToString());
|
|
||||||
if (response.Content != null)
|
|
||||||
{
|
|
||||||
Console.WriteLine(await response.Content.ReadAsStringAsync(cancellationToken));
|
|
||||||
}
|
|
||||||
Console.WriteLine();
|
|
||||||
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -139,7 +139,7 @@ namespace EpinelPS.Utils
|
|||||||
|
|
||||||
foreach (var c in reward.Character)
|
foreach (var c in reward.Character)
|
||||||
{
|
{
|
||||||
Console.WriteLine("MergeRewards - TODO Character");
|
Logging.WriteLine("MergeRewards - TODO Character", LogType.Error);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reward.InfraCoreExp != null)
|
if (reward.InfraCoreExp != null)
|
||||||
|
|||||||
Reference in New Issue
Block a user