コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
ファイル: Connector.cs プロジェクト: GameHole/Entities
 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}");
         }
     }));
 }
コード例 #3
0
ファイル: Connector.cs プロジェクト: GameHole/Entities
        protected override Task RunAsync(UdpResult result, UdpShared udpshared)
        {
            uint eid;

            udpshared.entities.TryGetValue(result.endPoint, out eid);
            udpshared.connectTcs.SetResult(eid);
            return(Task.CompletedTask);
        }
コード例 #4
0
ファイル: Connector.cs プロジェクト: GameHole/Entities
 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);
         }
     }));
 }
コード例 #5
0
 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));
 }
コード例 #6
0
ファイル: Connector.cs プロジェクト: GameHole/Entities
 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);
         }
     }));
 }
コード例 #7
0
ファイル: Connector.cs プロジェクト: GameHole/Entities
 protected abstract Task RunAsync(UdpResult result, UdpShared udpshared);
コード例 #8
0
ファイル: Connector.cs プロジェクト: GameHole/Entities
        public async void Run(UdpResult result, UdpShared world)
        {
            await RunAsync(result, world).ConfigureAwait(false);

            ByteStream.Return(result.byteStream as ByteStream);
        }