public void Send(UDPPackage package) { lock (this.locker) { byte[] bytes = package.Body; try { int sended = this._client.SendAsync(bytes, bytes.Length, this.EndPoint).GetAwaiter().GetResult(); if (sended != bytes.Length) { this.Event_SendError?.Invoke(new UDPEvent(this, package)); return; } if (this._listenThread == null) { this.StartListen(); } } catch (Exception e) { this.Event_ConnectionError?.Invoke(new UDPEvent(this, e)); return; } } }
private void listen() { try { UdpReceiveResult result = this._client.ReceiveAsync().GetAwaiter().GetResult(); byte[] bytes = result.Buffer; UDPPackage package = UDPPackage.Parse(bytes); IPEndPoint ip = result.RemoteEndPoint; if (!package.Broken) { this.Event_GetPackage?.Invoke(new UDPEvent(this, package, ip)); } else { this.Event_RecieveBrokenPackage?.Invoke(new UDPEvent(this, package, ip)); } } catch (Exception e) { lock (this.locker) this._listenThread = null; this.Event_ConnectionError?.Invoke(new UDPEvent(this, e)); return; } listen(); }
public UDPEvent(UDPSocket client, UDPPackage package) { this.Client = client; this.Package = package; }
public UDPEvent(UDPSocket client, UDPPackage package, IPEndPoint getFromEndPoint) { this.Client = client; this.Package = package; this.GetFromEndPoint = getFromEndPoint; }