Пример #1
0
        private static TcpDataPacket DecodeTcpPacket(byte[] request)
        {
            var reader  = new ReverseBinaryReader(new MemoryStream(request));
            var decoder = new DataDecoder(reader);

            return(decoder.DecodeTcpData());
        }
Пример #2
0
 public Codec7(ReverseBinaryReader reader)
 {
     if (reader == null)
     {
         throw new ArgumentNullException("reader");
     }
     _reader = reader;
 }
Пример #3
0
        static void Main()
        {
            XmlConfigurator.Configure();

            IPAddress ip;

            if (!IPAddress.TryParse(ConfigurationManager.AppSettings["ipAddress"], out ip))
            {
                Log.Error("Ip is not valid.");
                throw new ArgumentException("Ip is not valid.");
            }

            int port;

            if (!int.TryParse(ConfigurationManager.AppSettings["port"], out port))
            {
                Log.Error("Port is not valid.");
                throw new ArgumentException("Port is not valid.");
            }

            Task.Run(async() =>
            {
                using (var udpClient = new UdpClient(new IPEndPoint(ip, port)))
                {
                    Log.Info("Listening...");

                    while (true)
                    {
                        //IPEndPoint object will allow us to read datagrams sent from any source.
                        var receivedResults = await udpClient.ReceiveAsync();

                        byte[] data = receivedResults.Buffer;

                        Log.Info(string.Format("Received connection from: {0}", receivedResults.RemoteEndPoint));
                        Log.Info(string.Format("{0} - received [{1}]", DateTime.Now, String.Join("", data.Select(x => x.ToString("X2")).ToArray())));

                        var reader = new ReverseBinaryReader(new MemoryStream(data));

                        // Decode data
                        var avlData = new DataDecoder(reader).DecodeUdpData();

                        // Create response
                        var bytes = new List <byte>();

                        const short packetLength = 2 /* Id */ + 1 /* Type */ + 1 /* Avl packet id */ + 1 /* num of accepted elems */;
                        bytes.AddRange(BitConverter.GetBytes(BytesSwapper.Swap(packetLength)));
                        bytes.AddRange(BitConverter.GetBytes(BytesSwapper.Swap(avlData.PacketId)));
                        bytes.Add(avlData.PacketType);
                        bytes.Add(avlData.AvlPacketId);
                        bytes.Add((byte)avlData.AvlData.DataCount);

                        var response = bytes.ToArray();

                        Log.Info(string.Format("{0} - received [{1}]", DateTime.Now, String.Join("", bytes.Select(x => x.ToString("X2")).ToArray())));

                        await udpClient.SendAsync(response, response.Length, receivedResults.RemoteEndPoint);
                    }
                }
            });

            Console.ReadLine();
        }