Beispiel #1
0
        //pripoji Clienta na adresu receivera
        private void Connect(uint length, uint count, IPEndPoint ip)
        {
            _target         = ip;
            MaxPackets      = Math.Min(MaxPackets, count);
            MaxPacketLength = Math.Min(MaxPacketLength, length);

            _stop_and_wait = MaxPackets == 1;


            byte[] message = MessageConstructor.GetHandshake(MaxPacketLength, MaxPackets, MaxSpeed);
            Client.Connect(ip);
            Client.Send(message, message.Length);

            _is_connected = true;
            Connected?.Invoke(this, new EventArgs());
        }
Beispiel #2
0
        private void Connect()
        {
            _is_connected = false;
            try
            {
                //Client.Connect(Target);
                // navrhnu svoje hodnoty delky packetu a poctu packetu
                byte[] message = MessageConstructor.GetHandshake(MaxPacketLength, MaxPackets);
                Client.Send(message, message.Length, Target);

                DateTime milis = DateTime.Now;
                // handske timeout
                //TODO pridat nejaky timeout na handshake
                while (handshake_response == null || (DateTime.Now.Ticks - milis.Ticks) < HandshakeTimeout)
                {
                }
                if (handshake_response == null)
                {
                    throw new Exception("Handshake Timeout");
                }

                //if (MessageConstructor.ValidateMessage(handshake_response) &&  MessageConstructor.IsHandshake(handshake_response))
                //{
                //    // bud prijme moje => vrati mnou poslane hodnoty, nebo je snizi => Math.Min(...)
                //    MaxPacketLength = Math.Min(MaxPacketLength, BitConverter.ToInt32(handshake_response, 1));
                //    MaxPackets = Math.Min(MaxPackets, BitConverter.ToInt32(handshake_response, 1 + sizeof(int)));
                //}
                //else
                //{
                //    // pokud nevyjde CRC nebo message neni typu Hanshake, je neco spatne...
                //    throw new Exception("Invalid hanshake message from target");
                //}

                MaxPacketLength = Math.Min(MaxPacketLength, BitConverter.ToUInt32(handshake_response, 1));
                MaxPackets      = Math.Min(MaxPackets, BitConverter.ToUInt32(handshake_response, 1 + sizeof(int)));

                _stop_and_wait = MaxPackets == 1;

                handshake_response = null;

                //dispose of older packets
                if (Packets != null)
                {
                    DisposePackets();
                }


                _packets = new DataPacket[MaxPackets];
                for (int i = 0; i < MaxPackets; ++i)
                {
                    _packets[i]          = new DataPacket();
                    _packets[i].Timeout += OnPacketTimeout;
                }

                _is_connected = true;
            }
            catch (Exception e)
            {
                Console.WriteLine($"Error during connection to '{Target}': {e.Message}");
            }
        }