From 1912851186dcdcaef2e30ea9060f69e4d9f98c01 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sun, 26 Jul 2020 05:03:58 +1000 Subject: [PATCH] Expose networking classes in CommApi, delegate its Lua ver. to ApiHawk HttpTest/HttpTestGet in the .NET API now return null instead of throwing (Lua still throws) --- .../Api/Interfaces/ICommApi.cs | 32 +++------ .../Api/Libraries/CommApi.cs | 54 ++------------- .../tools/Lua/Libraries/CommLuaLibrary.cs | 67 +++++++++---------- 3 files changed, 49 insertions(+), 104 deletions(-) diff --git a/src/BizHawk.Client.Common/Api/Interfaces/ICommApi.cs b/src/BizHawk.Client.Common/Api/Interfaces/ICommApi.cs index 5c46fc2fdf..e5ea358be1 100644 --- a/src/BizHawk.Client.Common/Api/Interfaces/ICommApi.cs +++ b/src/BizHawk.Client.Common/Api/Interfaces/ICommApi.cs @@ -1,29 +1,17 @@ -namespace BizHawk.Client.Common +#nullable enable + +namespace BizHawk.Client.Common { public interface ICommApi : IExternalApi { - string SocketServerScreenShot(); - string SocketServerScreenShotResponse(); - string SocketServerSend(string SendString); - string SocketServerResponse(); - bool SocketServerSuccessful(); - void SocketServerSetTimeout(int timeout); + HttpCommunication? HTTP { get; } - void MmfSetFilename(string filename); - string MmfGetFilename(); - int MmfScreenshot(); - int MmfWrite(string mmf_filename, string outputString); - string MmfRead(string mmf_filename, int expectedSize); + MemoryMappedFiles? MMF { get; } - string HttpTest(); - string HttpTestGet(); - string HttpGet(string url); - string HttpPost(string url, string payload); - string HttpPostScreenshot(); - void HttpSetTimeout(int timeout); - void HttpSetPostUrl(string url); - void HttpSetGetUrl(string url); - string HttpGetPostUrl(); - string HttpGetGetUrl(); + SocketServer? Sockets { get; } + + string? HttpTest(); + + string? HttpTestGet(); } } diff --git a/src/BizHawk.Client.EmuHawk/Api/Libraries/CommApi.cs b/src/BizHawk.Client.EmuHawk/Api/Libraries/CommApi.cs index 4442933528..7602c5222f 100644 --- a/src/BizHawk.Client.EmuHawk/Api/Libraries/CommApi.cs +++ b/src/BizHawk.Client.EmuHawk/Api/Libraries/CommApi.cs @@ -1,59 +1,19 @@ +#nullable enable + using BizHawk.Client.Common; namespace BizHawk.Client.EmuHawk { public sealed class CommApi : ICommApi { - public string SocketServerScreenShot() => GlobalWin.socketServer.SendScreenshot(); + public HttpCommunication? HTTP => GlobalWin.httpCommunication; - public string SocketServerScreenShotResponse() => GlobalWin.socketServer.SendScreenshot(1000); + public MemoryMappedFiles? MMF => GlobalWin.memoryMappedFiles; - public string SocketServerSend(string SendString) => $"Sent : {GlobalWin.socketServer.SendString(SendString)} bytes"; + public SocketServer? Sockets => GlobalWin.socketServer; - public string SocketServerResponse() => GlobalWin.socketServer.ReceiveMessage(); + public string? HttpTest() => HTTP == null ? null : string.Join("\n", HttpTestGet(), HTTP.SendScreenshot(), "done testing"); - public bool SocketServerSuccessful() => GlobalWin.socketServer.Successful; - - public void SocketServerSetTimeout(int timeout) => GlobalWin.socketServer.SetTimeout(timeout); - - public void SocketServerSetIp(string ip) => GlobalWin.socketServer.IP = ip; - - public void SetSocketServerPort(int port) => GlobalWin.socketServer.Port = port; - - public string SocketServerGetIp() => GlobalWin.socketServer.IP; - - public int SocketServerGetPort() => GlobalWin.socketServer.Port; - - public string SocketServerGetInfo() => GlobalWin.socketServer.GetInfo(); - - public void MmfSetFilename(string filename) => GlobalWin.memoryMappedFiles.Filename = filename; - - public string MmfGetFilename() => GlobalWin.memoryMappedFiles.Filename; - - public int MmfScreenshot() => GlobalWin.memoryMappedFiles.ScreenShotToFile(); - - public int MmfWrite(string mmf_filename, string outputString) => GlobalWin.memoryMappedFiles.WriteToFile(mmf_filename, outputString); - - public string MmfRead(string mmf_filename, int expectedSize) => GlobalWin.memoryMappedFiles.ReadFromFile(mmf_filename, expectedSize); - - public string HttpTest() => string.Join("\n", HttpTestGet(), GlobalWin.httpCommunication.SendScreenshot(), "done testing"); - - public string HttpTestGet() => GlobalWin.httpCommunication.Get(GlobalWin.httpCommunication.GetUrl).Result; - - public string HttpGet(string url) => GlobalWin.httpCommunication.ExecGet(url); - - public string HttpPost(string url, string payload) => GlobalWin.httpCommunication.ExecPost(url, payload); - - public string HttpPostScreenshot() => GlobalWin.httpCommunication.SendScreenshot(); - - public void HttpSetTimeout(int timeout) => GlobalWin.httpCommunication.SetTimeout(timeout); - - public void HttpSetPostUrl(string url) => GlobalWin.httpCommunication.PostUrl = url; - - public void HttpSetGetUrl(string url) => GlobalWin.httpCommunication.GetUrl = url; - - public string HttpGetPostUrl() => GlobalWin.httpCommunication.PostUrl; - - public string HttpGetGetUrl() => GlobalWin.httpCommunication.GetUrl; + public string? HttpTestGet() => HTTP?.Get(HTTP.GetUrl)?.Result; } } diff --git a/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/CommLuaLibrary.cs b/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/CommLuaLibrary.cs index 5b15cf59d7..19bd66c1a8 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/CommLuaLibrary.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Lua/Libraries/CommLuaLibrary.cs @@ -7,7 +7,7 @@ using System.Text; namespace BizHawk.Client.EmuHawk { [Description("A library for communicating with other programs")] - public sealed class CommLuaLibrary : LuaLibraryBase + public sealed class CommLuaLibrary : DelegatingLuaLibraryEmu { public CommLuaLibrary(Lua lua) : base(lua) { } @@ -30,20 +30,20 @@ namespace BizHawk.Client.EmuHawk } [LuaMethod("socketServerIsConnected", "socketServerIsConnected")] - public bool SocketServerIsConnected() => GlobalWin.socketServer.Connected; + public bool SocketServerIsConnected() => APIs.Comm.Sockets.Connected; [LuaMethod("socketServerScreenShot", "sends a screenshot to the Socket server")] public string SocketServerScreenShot() { CheckSocketServer(); - return GlobalWin.socketServer?.SendScreenshot(); + return APIs.Comm.Sockets?.SendScreenshot(); } [LuaMethod("socketServerScreenShotResponse", "sends a screenshot to the Socket server and retrieves the response")] public string SocketServerScreenShotResponse() { CheckSocketServer(); - return GlobalWin.socketServer?.SendScreenshot(1000).ToString(); + return APIs.Comm.Sockets?.SendScreenshot(1000).ToString(); } [LuaMethod("socketServerSend", "sends a string to the Socket server")] @@ -53,53 +53,53 @@ namespace BizHawk.Client.EmuHawk { return -1; } - return GlobalWin.socketServer.SendString(SendString); + return APIs.Comm.Sockets.SendString(SendString); } [LuaMethod("socketServerResponse", "receives a message from the Socket server")] public string SocketServerResponse() { CheckSocketServer(); - return GlobalWin.socketServer?.ReceiveMessage(); + return APIs.Comm.Sockets?.ReceiveMessage(); } [LuaMethod("socketServerSuccessful", "returns the status of the last Socket server action")] public bool SocketServerSuccessful() { - return CheckSocketServer() && GlobalWin.socketServer.Successful; + return CheckSocketServer() && APIs.Comm.Sockets.Successful; } [LuaMethod("socketServerSetTimeout", "sets the timeout in milliseconds for receiving messages")] public void SocketServerSetTimeout(int timeout) { CheckSocketServer(); - GlobalWin.socketServer?.SetTimeout(timeout); + APIs.Comm.Sockets?.SetTimeout(timeout); } [LuaMethod("socketServerSetIp", "sets the IP address of the Lua socket server")] public void SocketServerSetIp(string ip) { CheckSocketServer(); - GlobalWin.socketServer.IP = ip; + APIs.Comm.Sockets.IP = ip; } [LuaMethod("socketServerSetPort", "sets the port of the Lua socket server")] public void SocketServerSetPort(int port) { CheckSocketServer(); - GlobalWin.socketServer.Port = port; + APIs.Comm.Sockets.Port = port; } [LuaMethod("socketServerGetIp", "returns the IP address of the Lua socket server")] public string SocketServerGetIp() { - return GlobalWin.socketServer?.IP; + return APIs.Comm.Sockets?.IP; } [LuaMethod("socketServerGetPort", "returns the port of the Lua socket server")] public int? SocketServerGetPort() { - return GlobalWin.socketServer?.Port; + return APIs.Comm.Sockets?.Port; } [LuaMethod("socketServerGetInfo", "returns the IP and port of the Lua socket server")] @@ -109,12 +109,12 @@ namespace BizHawk.Client.EmuHawk { return ""; } - return GlobalWin.socketServer.GetInfo(); + return APIs.Comm.Sockets.GetInfo(); } private bool CheckSocketServer() { - if (GlobalWin.socketServer == null) + if (APIs.Comm.Sockets == null) { Log("Socket server was not initialized, please initialize it via the command line"); return false; @@ -128,39 +128,39 @@ namespace BizHawk.Client.EmuHawk public void MmfSetFilename(string filename) { CheckMmf(); - GlobalWin.memoryMappedFiles.Filename = filename; + APIs.Comm.MMF.Filename = filename; } [LuaMethod("mmfGetFilename", "Gets the filename for the screenshots")] public string MmfGetFilename() { CheckMmf(); - return GlobalWin.memoryMappedFiles?.Filename; + return APIs.Comm.MMF?.Filename; } [LuaMethod("mmfScreenshot", "Saves screenshot to memory mapped file")] public int MmfScreenshot() { CheckMmf(); - return GlobalWin.memoryMappedFiles.ScreenShotToFile(); + return APIs.Comm.MMF.ScreenShotToFile(); } [LuaMethod("mmfWrite", "Writes a string to a memory mapped file")] public int MmfWrite(string mmf_filename, string outputString) { CheckMmf(); - return GlobalWin.memoryMappedFiles.WriteToFile(mmf_filename, outputString); + return APIs.Comm.MMF.WriteToFile(mmf_filename, outputString); } [LuaMethod("mmfRead", "Reads a string from a memory mapped file")] public string MmfRead(string mmf_filename, int expectedSize) { CheckMmf(); - return GlobalWin.memoryMappedFiles?.ReadFromFile(mmf_filename, expectedSize).ToString(); + return APIs.Comm.MMF?.ReadFromFile(mmf_filename, expectedSize).ToString(); } private void CheckMmf() { - if (GlobalWin.memoryMappedFiles == null) + if (APIs.Comm.MMF == null) { Log("Memory mapped file was not initialized, please initialize it via the command line"); } @@ -170,79 +170,76 @@ namespace BizHawk.Client.EmuHawk [LuaMethod("httpTest", "tests HTTP connections")] public string HttpTest() { - var list = new StringBuilder(); - list.AppendLine(GlobalWin.httpCommunication.Get(GlobalWin.httpCommunication.GetUrl).Result); - list.AppendLine(GlobalWin.httpCommunication.SendScreenshot()); - list.AppendLine("done testing"); - return list.ToString(); + if (APIs.Comm.HTTP == null) throw new NullReferenceException(); // to match previous behaviour + return APIs.Comm.HttpTest(); } [LuaMethod("httpTestGet", "tests the HTTP GET connection")] public string HttpTestGet() { CheckHttp(); - return (GlobalWin.httpCommunication?.Get(GlobalWin.httpCommunication.GetUrl))?.Result; + return APIs.Comm.HttpTestGet(); } [LuaMethod("httpGet", "makes a HTTP GET request")] public string HttpGet(string url) { CheckHttp(); - return GlobalWin.httpCommunication?.ExecGet(url); + return APIs.Comm.HTTP?.ExecGet(url); } [LuaMethod("httpPost", "makes a HTTP POST request")] public string HttpPost(string url, string payload) { CheckHttp(); - return GlobalWin.httpCommunication?.ExecPost(url, payload); + return APIs.Comm.HTTP?.ExecPost(url, payload); } [LuaMethod("httpPostScreenshot", "HTTP POST screenshot")] public string HttpPostScreenshot() { CheckHttp(); - return GlobalWin.httpCommunication?.SendScreenshot(); + return APIs.Comm.HTTP?.SendScreenshot(); } [LuaMethod("httpSetTimeout", "Sets HTTP timeout in milliseconds")] public void HttpSetTimeout(int timeout) { CheckHttp(); - GlobalWin.httpCommunication?.SetTimeout(timeout); + APIs.Comm.HTTP?.SetTimeout(timeout); } [LuaMethod("httpSetPostUrl", "Sets HTTP POST URL")] public void HttpSetPostUrl(string url) { CheckHttp(); - GlobalWin.httpCommunication.PostUrl = url; + APIs.Comm.HTTP.PostUrl = url; } [LuaMethod("httpSetGetUrl", "Sets HTTP GET URL")] public void HttpSetGetUrl(string url) { CheckHttp(); - GlobalWin.httpCommunication.GetUrl = url; + APIs.Comm.HTTP.GetUrl = url; } [LuaMethod("httpGetPostUrl", "Gets HTTP POST URL")] public string HttpGetPostUrl() { CheckHttp(); - return GlobalWin.httpCommunication?.PostUrl; + return APIs.Comm.HTTP?.PostUrl; } [LuaMethod("httpGetGetUrl", "Gets HTTP GET URL")] public string HttpGetGetUrl() { CheckHttp(); - return GlobalWin.httpCommunication?.GetUrl; + return APIs.Comm.HTTP?.GetUrl; } private void CheckHttp() { - if (GlobalWin.httpCommunication == null) + if (APIs.Comm.HTTP == null) { Log("HTTP was not initialized, please initialize it via the command line"); }