private void DataReceived(IAsyncResult ar) { IPEndPoint endpoint = null; byte[] bytes = client.EndReceive(ar, ref endpoint); XyzMessage[] messages = new XyzMessageDecoder(bytes).Decode(); client.BeginReceive(DataReceived, client); on_Message?.Invoke(endpoint, XyzUtils.Inflate(messages[0].Bytes), messages[0].Type); }
public async Task Receiver() { try { byte[] header = await ReadBytes(5); int length = BitConverter.ToInt32(header, 0); int type = header[4]; byte[] message_bytes = await ReadBytes(length); this.OnMessage?.Invoke(XyzUtils.Inflate(message_bytes), type); } catch (Exception) { Disconnect(true); } if (client.Connected && !disconnected) { await Receiver(); } }