diff --git a/csharp/Test/Program.cs b/csharp/Test/Program.cs index 585098114a6ed3cb5009f0a6edd5a3ca4b834e62..4a752e8bd23e2a53a882e2d88dbcb31d88d3e273 100644 --- a/csharp/Test/Program.cs +++ b/csharp/Test/Program.cs @@ -1,61 +1,83 @@ -using System.Text; +using System; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using System.Threading.Tasks; using Core; using Newtonsoft.Json.Linq; -namespace csharp.Test; - -public class Program +namespace csharp.Test { - private static async Task Main(string[] args) + public class Program { - /*const int ControlPort = 20012; - const string ControlIP = "corelink.hsrn.nyu.edu"; //"corelink.hpc.nyu.edu" - const bool autoReconnect = false; - var username = "Testuser"; - var password = "Testpassword"; - var workspace = "Holodeck"; - var protocol = "udp"; - var datatype = "distance"; - - var exchange = new CorelinkDataXchgTcpProtocolManager(ControlIP, ControlPort, - (i, bytes, objec) => { Console.WriteLine(objec); }); - await exchange.ConnectAsync(); - - Console.WriteLine("Testing the Tcp sender...."); - var jsonObject = new JObject(); - jsonObject["workspace"] = workspace; - jsonObject["protocol"] = protocol; - jsonObject["type"] = datatype; - jsonObject["metadata"] = ""; - jsonObject["IP"] = ControlIP; - jsonObject["port"] = ControlPort; - - var senderData = jsonObject.ToString(); - Console.WriteLine($"Json data requested data {senderData}"); - - exchange.Send(0, Encoding.ASCII.GetBytes(senderData)); - - Thread.Sleep(10000);*/ - - TcpStreamExperimentation experimentation = new TcpStreamExperimentation("corelink.hsrn.nyu.edu"); - await experimentation.SenderSetupTCP(0, 20012); - await experimentation.ReceiverSetupTCP(0, 20012, (i, bytes, arg3) => - { - Console.WriteLine(arg3); - }); - - if (experimentation.SenderStreams.TryGetValue(0, out var senderClient)) + private static async Task Main(string[] args) { - var stream = senderClient.GetStream(); - byte[] dataToSend = Encoding.UTF8.GetBytes("Hello, World!"); - stream.Write(dataToSend, 0, dataToSend.Length); - Console.WriteLine("Data sent!"); + const string ControlIP = "corelink.hsrn.nyu.edu"; + const int ControlPort = 20012; + const string username = "Testuser"; + const string password = "Testpassword"; + const string workspace = "Holodeck"; + const string protocol = "udp"; + const string datatype = "distance"; + + TcpStreamExperimentation experimentation = new(ControlIP); + await experimentation.ReceiverSetupTCP(0, ControlPort, (streamId, bytes, response) => + { + var responseData = Encoding.UTF8.GetString(bytes); + Console.WriteLine($"Received response on stream {streamId}: {responseData}"); + }); + + await experimentation.SenderSetupTCP(0, ControlPort); + var authPayload = new JObject + { + ["action"] = "authenticate", + ["username"] = username, + ["password"] = password + }; + + if (experimentation.SenderStreams.TryGetValue(0, out var senderClient)) + { + Console.WriteLine("Sending authentication request..."); + await SendDataAsync(senderClient.GetStream(), authPayload.ToString()); + } + else + { + Console.WriteLine("Sender stream not initialized!"); + return; + } + + Thread.Sleep(2000); + var workspacePayload = new JObject + { + ["action"] = "request_workspace", + ["workspace"] = workspace, + ["protocol"] = protocol, + ["type"] = datatype + }; + + Console.WriteLine("Requesting workspace access..."); + if (experimentation.SenderStreams.TryGetValue(0, out senderClient)) + { + await SendDataAsync(senderClient.GetStream(), workspacePayload.ToString()); + } + + Thread.Sleep(2000); + + Console.WriteLine("Program completed."); } - else + + private static async Task SendDataAsync(NetworkStream stream, string data) { - Console.WriteLine($"Sender stream with ID {0} not found."); + try + { + var dataBytes = Encoding.UTF8.GetBytes(data + "\n"); // Ensure newline termination for JSON payloads + await stream.WriteAsync(dataBytes, 0, dataBytes.Length); + Console.WriteLine($"Sent: {data}"); + } + catch (Exception ex) + { + Console.WriteLine($"Error sending data: {ex.Message}"); + } } - - Thread.Sleep(10000); } -} \ No newline at end of file +}