示例#1
0
        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);
            }
        }
示例#2
0
 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;
     }
 }
示例#3
0
        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);
            }
        }