//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()); }
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}"); } }