Exemplo n.º 1
0
        private void receiverRun()
        {
            IPEndPoint  ep           = (IPEndPoint)sock.RemoteEndPoint;
            List <byte> incomingData = new List <byte>();

            byte[] buffer   = null;
            byte[] temp     = null;
            int    received = 0;

            while (sock.Connected)
            {
                try
                {
                    while (true)
                    {
                        buffer   = new byte[1024];
                        received = sock.Receive(buffer);
                        if (received == 1024)
                        {
                            incomingData.AddRange(buffer);
                        }
                        else
                        {
                            temp = new byte[received];
                            Array.Copy(buffer, temp, received);
                            incomingData.AddRange(temp);
                        }
                        if (Enumerable.SequenceEqual(incomingData.GetRange(incomingData.Count - Registry.endOfPacket.Length, Registry.endOfPacket.Length).ToArray(), Registry.endOfPacket))
                        {
                            break;
                        }
                    }
                    if (Side.isClient)
                    {
                        ClientNetworkManager.receivedPacketFromServer(deserialize(incomingData.ToArray()));
                    }
                    else
                    {
                        ServerNetworkManager.receivedPacketFromClient(this, deserialize(incomingData.ToArray()));
                    }
                    incomingData.Clear();
                }
                catch (Exception ex)
                {
                    try
                    {
                        if (sock.Poll(1000, SelectMode.SelectRead) && sock.Available == 0)
                        {
                            break;
                        }
                    }
                    catch (Exception)
                    {
                        break;
                    }
                    Console.WriteLine(ex.Message);
                    Console.WriteLine("[Network]: Chyba při přijímání packetu! Ignoruji...");
                }
            }
            while (transmitter.IsAlive)
            {
                Thread.Sleep(1);
            }
            if (!Side.isClient)
            {
                Logger.log("[Network]: Pripojení ztraceno (" + ep.Address + ":" + ep.Port + ")");
            }
        }