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); } } }
protected override Task RunAsync(UdpResult result, UdpShared udpshared) { return(Task.Factory.StartNew(() => { uint eid; if (udpshared.entities.TryGetValue(result.endPoint, out eid)) { ushort func = result.byteStream.GetUShort(); //DebugUtility.Log($"DealMsg::func::{func}"); using (IPay paylodable = udpshared.msgMaper.TakeMsgClone(func)) { if (paylodable == null) { return; } //DebugUtility.Log($"DealMsg::func::{func}"); paylodable.GetFrom(result.byteStream); ADealer dealer = udpshared.msgMaper.TakeDealer(func); Entity entity; if (udpshared.world.TryGetEntity(eid, out entity)) { dealer?.Run(entity, paylodable); } } //DebugUtility.Log($"DealMsg:: id::{entity.Id}"); } })); }
protected override Task RunAsync(UdpResult result, UdpShared udpshared) { uint eid; udpshared.entities.TryGetValue(result.endPoint, out eid); udpshared.connectTcs.SetResult(eid); return(Task.CompletedTask); }
protected override Task RunAsync(UdpResult result, UdpShared udpshared) { return(Task.Factory.StartNew(() => { if (!udpshared.entities.ContainsKey(result.endPoint)) { Entity e = udpshared.world.AddEntity(); e.Add(new UdpField(result.endPoint)); udpshared.entities.Add(result.endPoint, e.Id); //DebugUtility.Log($"Accept::RunAsync ID={e.Id}"); udpshared.SendHead(result.endPoint, ConDefine.onConnect); } })); }
private Task <UdpResult> ReceveFromAsync(EndPoint end) { return(Task.Factory.StartNew(() => { byte[] buffer = unSafeByteHelper.Take(mtu); int n = client.ReceiveFrom(buffer, ref end); ByteStream stream = ByteStream.Take(); stream.Set(buffer, 0, n); UdpResult result = new UdpResult() { endPoint = (IPEndPoint)end, byteStream = stream }; unSafeByteHelper.Return(buffer); return result; }, cancellation.Token)); }
protected override Task RunAsync(UdpResult result, UdpShared udpshared) { return(Task.Factory.StartNew(() => { uint eid; if (udpshared.entities.TryGetValue(result.endPoint, out eid)) { Entity e; if (udpshared.world.TryGetEntity(eid, out e)) { udpshared.world.DestroyEntity(e); udpshared.entities.Remove(result.endPoint); } udpshared.SendHead(result.endPoint, ConDefine.onDisconect); } })); }
protected abstract Task RunAsync(UdpResult result, UdpShared udpshared);
public async void Run(UdpResult result, UdpShared world) { await RunAsync(result, world).ConfigureAwait(false); ByteStream.Return(result.byteStream as ByteStream); }