From 61f43402ecd9b387126d74a18a98c11879965fb8 Mon Sep 17 00:00:00 2001 From: milimoe Date: Fri, 10 Jan 2025 19:44:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20WebSocket=20=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Library/Main.cs | 2 + Library/Tests/WebSocketTest.cs | 161 +++++++++++++++++++++++++++------ 2 files changed, 135 insertions(+), 28 deletions(-) diff --git a/Library/Main.cs b/Library/Main.cs index a17640a..1cacc62 100644 --- a/Library/Main.cs +++ b/Library/Main.cs @@ -8,6 +8,8 @@ using Oshima.FunGame.OshimaModules; using Oshima.FunGame.OshimaModules.Characters; using Oshima.FunGame.OshimaModules.Effects.OpenEffects; +_ = new Milimoe.FunGame.Testing.Tests.WebSocketTest(); + CharacterModule cm = new(); cm.Load(); SkillModule sm = new(); diff --git a/Library/Tests/WebSocketTest.cs b/Library/Tests/WebSocketTest.cs index c282f43..b795819 100644 --- a/Library/Tests/WebSocketTest.cs +++ b/Library/Tests/WebSocketTest.cs @@ -1,42 +1,147 @@ -using Milimoe.FunGame.Core.Api.Utility; +using System.Collections; +using Milimoe.FunGame.Core.Api.Transmittal; +using Milimoe.FunGame.Core.Api.Utility; +using Milimoe.FunGame.Core.Controller; +using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Library.Common.Network; +using Milimoe.FunGame.Core.Library.Constant; namespace Milimoe.FunGame.Testing.Tests { + public class WebSocketTestRunTime : RunTimeController + { + public bool Quit { get; set; } = false; + + public override bool BeforeConnect(ref string addr, ref int port, ArrayList args) + { + string[] strings = ["oshima.fungame.fastauto"]; + args.Add(strings); + args.Add(false); + return true; + } + + public override void AfterConnect(ArrayList ConnectArgs) + { + string msg = ConnectArgs[1]?.ToString() ?? ""; + string serverName = ConnectArgs[2]?.ToString() ?? ""; + string notice = ConnectArgs[3]?.ToString() ?? ""; + if (msg != "") Console.WriteLine(msg); + if (serverName != "") Console.WriteLine(serverName); + if (notice != "") Console.WriteLine(notice); + } + + public async Task StartTest() + { + await ConnectAsync(TransmittalType.WebSocket, "localhost", 5000, false, "ws"); + } + + public async Task CheckInput(string str) + { + if (WebSocket is null || Quit) + { + if (str == "retry") + { + if (await ConnectAsync(TransmittalType.WebSocket, "localhost", 5000, false, "ws") == ConnectResult.Success) + { + Console.WriteLine("重连成功!"); + } + else + { + Console.WriteLine("重连失败!"); + } + } + return; + } + if (str == "quit") + { + await WebSocket.Send(SocketMessageType.Disconnect); + } + if (str == "login") + { + DataRequest request = NewDataRequest(DataRequestType.Login_Login); + request.AddRequestData("username", "mili"); + request.AddRequestData("password", Encryption.HmacSha512("123123", "Mili")); + request.AddRequestData("autokey", ""); + request.AddRequestData("key", Guid.Empty); + await request.SendRequestAsync(); + if (request.Result == RequestResult.Success) + { + string msg = request.GetResult("msg") ?? ""; + if (msg != "") + { + Console.WriteLine(msg); + } + else + { + Guid loginKey = request.GetResult("key"); + if (loginKey != Guid.Empty) + { + request = NewDataRequest(DataRequestType.Login_Login); + request.AddRequestData("username", "username"); + request.AddRequestData("password", Encryption.HmacSha512("password", "username")); + request.AddRequestData("autokey", ""); + request.AddRequestData("key", loginKey); + await request.SendRequestAsync(); + if (request.Result == RequestResult.Success) + { + msg = request.GetResult("msg") ?? ""; + if (msg != "") + { + Console.WriteLine(msg); + } + else + { + User? user = request.GetResult("user"); + if (user != null) + { + Console.WriteLine("登录用户完成:" + user.Username); + } + } + } + } + } + } + } + } + + public override void Error(Exception e) + { + Console.WriteLine(e.ToString()); + } + + public override void WritelnSystemInfo(string msg) + { + Console.WriteLine(msg); + } + + protected override void SocketHandler_Disconnect(SocketObject ServerMessage) + { + Quit = true; + } + + protected override void SocketHandler_HeartBeat(SocketObject ServerMessage) + { + Console.WriteLine("服务器连接成功"); + } + } + public class WebSocketTest { public WebSocketTest() { - bool quit = false; - HTTPClient? client = null; - TaskUtility.NewTask(async () => - { - string[] strings = ["oshima.fungame.fastauto"]; - client = await HTTPClient.Connect("localhost", 5000, false, "ws", strings, false); - if (client.Connected) - { - client.AddSocketObjectHandler(obj => - { - Console.WriteLine(NetworkUtility.JsonSerialize(obj)); - if (obj.SocketType == Core.Library.Constant.SocketMessageType.Connect) - { - client.Token = obj.GetParam(2); - } - if (obj.SocketType == Core.Library.Constant.SocketMessageType.Disconnect) - { - quit = true; - client.Close(); - } - }); - } - }).OnError(Console.WriteLine); - while (!quit) + WebSocketTestRunTime runtime = new(); + TaskUtility.NewTask(runtime.StartTest).OnError(Console.WriteLine); + while (!runtime.Quit) { string str = Console.ReadLine() ?? ""; - if (str == "quit") + TaskUtility.NewTask(async () => await runtime.CheckInput(str)).OnError(Console.WriteLine).OnCompleted(() => { - client?.Send(Core.Library.Constant.SocketMessageType.Disconnect); - } + if (str == "quit") + { + Console.WriteLine("断开服务器连接成功!"); + Console.ReadLine(); + } + }); } } }