Example #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);
                }
            }
        }
Example #2
0
        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);
                }
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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);
                    }
                }
            }
        }
Example #5
0
        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);
            }
        }