public static void SendViaClient(this TcpClient client, string message, Packet.Owner owner, int id) { try { Logger.Instance.Log(Logger.Type.Ok, $"SendObject started, owner: {owner} Id: {id} Message: {message}"); var packet = new Packet() { Id = id, Message = message, PacketOwner = owner }; var data = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(packet) + "\0"); // \0 is used as a message delimiter // Get a client stream for reading and writing. var stream = client.GetStream(); // Send the message to the connected TcpServer. stream.Write(data, 0, data.Length); //Console.WriteLine("Sent: {0}", JsonSerializer.Serialize(packet)); } catch (Exception e) { Logger.Instance.Log(Logger.Type.Error, $"SendViaClient failed, owner: {owner} Id: {id} Message: {message}"); throw new Exception("Sender failed \n " + e); } }
public static void SendObject(this TcpClient client, object obj, Packet.Owner owner, int id) { try { var message = JsonSerializer.Serialize(obj); SendViaClient(client, message, owner, id); Logger.Instance.Log(Logger.Type.Ok, $"SendObject succeeded, owner: {owner} Id: {id} Message: {message}"); } catch (Exception e) { Logger.Instance.Log(Logger.Type.Error, $"SendObject failed: Exception raised: {e.StackTrace} {e.Message}"); throw; } }
public static string Receive(this TcpClient client, Packet.Owner owner, int expectedId) { var data = ""; Logger.Instance.Log(Logger.Type.Ok, $"Receiver started: owner: {owner} expectedId: {expectedId}"); try { // maximum size of message, large size is chosen for the moment var bytes = new byte[1048576 * 2 * 2 * 2 * 2 * 2]; while (true) { // Get a stream object for reading and writing var stream = client.GetStream(); var i = 0; // Loop to receive all the data sent by the client. //(i = stream.Read(bytes, 0, bytes.Length)) != 0 while (true) { // Translate data bytes to a ASCII string. i = stream.Read(bytes, 0, bytes.Length); data = Encoding.UTF8.GetString(bytes, 0, i); var packet = FindPacket(data, expectedId); if (packet is null) { continue; } if (packet.PacketOwner != owner) { Logger.Instance.Log(Logger.Type.Ok, $"Received a packet owner: {packet.PacketOwner} Id: {packet.Id} data: {packet.Message}"); return(packet.Message); } } } } catch (Exception e) { Logger.Instance.Log(Logger.Type.Error, $"Receive: owner: {owner} expectedId: {expectedId} data: {data}"); throw new Exception("Receiver failed to receive data, last piece of data : " + data + "\n" + e.Message); } }