private async void Recv() { IPEndPoint point = new IPEndPoint(IPAddress.Any, 0); while (!cancellation.Token.IsCancellationRequested) { try { UdpResult result = await ReceveFromAsync(point).ConfigureAwait(false); if (Pid != result.byteStream.GetUInt()) { continue; } ConDealer dealer; if (conDealers.TryGetValue(result.byteStream.GetByte(), out dealer)) { dealer.Run(result, this); } } catch (SocketException e) { if (e.ErrorCode == 10054) { continue; } } catch (Exception e) { DebugUtility.Error(e); } } }
public void Send <T>(Entity entity, ref T data) where T : struct, IToBytes { if (PayloadPakcet <T> .Type == 0) { throw new NotSupportMessageTypeException(typeof(T)); } UdpField udpClient; if (entity.TryGet(out udpClient)) { byte[] pay = Pid.ToBytes().Add(ConDefine.msg).Add(PayloadPakcet <T> .Type.ToBytes()).Add(data.ToBytes()); try { client.SendTo(pay, udpClient.endPoint); } catch (Exception e) { DebugUtility.Error(e); throw; } finally { unSafeByteHelper.Return(pay); } } }
private static ConcurrentQueue <byte[]> GetQueue(int count) { ConcurrentQueue <byte[]> queue; if (!dictionary.TryGetValue(count, out queue)) { queue = new ConcurrentQueue <byte[]>(); if (!dictionary.TryAdd(count, queue)) { DebugUtility.Error($"GetQueue::This count {count} Queue Allready Added"); } } return(queue); }
private async void receve(Entity entity) { var websocket = entity.Get <NetworkData>().webSocket; while (true) { if (!world.HasEntity(entity.Id)) { return; } ByteStream stream = null; try { byte[] rec = await websocket.ReceiveAsync().ConfigureAwait(false); stream = ByteStream.Take(); stream.Set(rec); ushort func = stream.GetUShort(); using (IPay paylodable = maper.TakeMsgClone(func)) { if (paylodable == null) { return; } paylodable.GetFrom(stream); ADealer dealer = maper.TakeDealer(func); dealer?.Run(entity, paylodable); } } catch (Exception e) { DebugUtility.Error($"Error::{e}"); } finally { if (stream != null) { ByteStream.Return(stream); } } } }
public void Send <T>(Entity entity, ref T data) where T : struct, IToBytes { var socket = entity.Get <NetworkData>().webSocket; if (PayloadPakcet <T> .Type == 0) { throw new NotSupportMessageTypeException(typeof(T)); } byte[] pay = PayloadPakcet <T> .Type.ToBytes().Add(data.ToBytes()); try { socket.SendAsync(pay, 0, pay.Length); } catch (Exception e) { DebugUtility.Error(e); throw; } finally { unSafeByteHelper.Return(pay); } }