Пример #1
0
        public void Update()
        {
            this.OnEvents();

            if (this.Service() < 0)
            {
                return;
            }

            while (true)
            {
                ENetEvent eNetEvent = this.TryGetEvent();
                if (eNetEvent == null)
                {
                    return;
                }

                switch (eNetEvent.Type)
                {
                case EventType.Connect:
                {
                    // 这是一个connect peer
                    if (this.USocketManager.ContainsKey(eNetEvent.Peer))
                    {
                        USocket uSocket = this.USocketManager[eNetEvent.Peer];
                        uSocket.OnConnected();
                        break;
                    }

                    // 这是accept peer
                    if (this.AcceptTcs != null)
                    {
                        this.OnAccepted(eNetEvent);
                        break;
                    }

                    // 如果server端没有acceptasync,则请求放入队列
                    this.connQueue.Add(eNetEvent.Peer, eNetEvent);
                    break;
                }

                case EventType.Receive:
                {
                    USocket uSocket = this.USocketManager[eNetEvent.Peer];
                    uSocket.OnReceived(eNetEvent);
                    break;
                }

                case EventType.Disconnect:
                {
                    USocket uSocket = this.USocketManager[eNetEvent.Peer];
                    this.USocketManager.Remove(uSocket.PeerPtr);
                    uSocket.PeerPtr = IntPtr.Zero;
                    uSocket.OnDisconnect(eNetEvent);
                    break;
                }
                }
            }
        }
Пример #2
0
 internal void OnReceived(ENetEvent eNetEvent)
 {
     // 将包放到缓存队列
     using (UPacket packet = new UPacket(eNetEvent.Packet))
     {
         byte[] bytes = packet.Bytes;
         this.RecvQueue.Enqueue(bytes);
     }
 }
Пример #3
0
 internal void OnConnected(ENetEvent eNetEvent)
 {
     isConnected = true;
     while (this.sendQueue.Count > 0)
     {
         BufferInfo info = this.sendQueue.Dequeue();
         this.SendAsync(info.Buffer, info.ChannelID, info.Flags);
     }
 }
Пример #4
0
		private ENetEvent TryGetEvent()
		{
			if (this.eNetEventCache == null)
			{
				this.eNetEventCache = new ENetEvent();
			}
			if (NativeMethods.ENetHostCheckEvents(this.host, this.eNetEventCache) <= 0)
			{
				return null;
			}
			ENetEvent eNetEvent = this.eNetEventCache;
			this.eNetEventCache = null;
			return eNetEvent;
		}
Пример #5
0
        private ENetEvent TryGetEvent()
        {
            if (this.eNetEventCache == null)
            {
                this.eNetEventCache = new ENetEvent();
            }
            if (NativeMethods.ENetHostCheckEvents(this.host, this.eNetEventCache) <= 0)
            {
                return(null);
            }
            ENetEvent eNetEvent = this.eNetEventCache;

            this.eNetEventCache = null;
            return(eNetEvent);
        }
Пример #6
0
        public void Update()
        {
            this.OnEvents();

            if (this.Service() < 0)
            {
                return;
            }

            while (true)
            {
                ENetEvent eNetEvent = this.GetEvent();
                if (eNetEvent == null)
                {
                    return;
                }

                switch (eNetEvent.Type)
                {
                case EventType.Connect:
                {
                    // 这是一个connect peer
                    if (this.USocketManager.ContainsKey(eNetEvent.Peer))
                    {
                        USocket uSocket = this.USocketManager[eNetEvent.Peer];
                        uSocket.OnConnected(eNetEvent);
                    }
                    break;
                }

                case EventType.Receive:
                {
                    USocket uSocket = this.USocketManager[eNetEvent.Peer];
                    uSocket.OnReceived(eNetEvent);
                    break;
                }

                case EventType.Disconnect:
                {
                    USocket uSocket = this.USocketManager[eNetEvent.Peer];
                    this.USocketManager.Remove(uSocket.PeerPtr);
                    uSocket.PeerPtr = IntPtr.Zero;
                    uSocket.OnDisconnect(eNetEvent);
                    break;
                }
                }
            }
        }
Пример #7
0
        private void OnAccepted(ENetEvent eEvent)
        {
            if (eEvent.Type == EventType.Disconnect)
            {
                this.AcceptTcs.TrySetException(new Exception("socket disconnected in accpet"));
            }

            USocket socket = new USocket(eEvent.Peer, this);

            this.USocketManager.Add(socket.PeerPtr, socket);
            socket.OnAccepted();

            var tcs = this.AcceptTcs;

            this.AcceptTcs = null;
            tcs.SetResult(socket);
        }
Пример #8
0
 internal static extern int ENetHostService(IntPtr host, ENetEvent ev, uint timeout);
Пример #9
0
 internal static extern int ENetHostCheckEvents(IntPtr host, ENetEvent ev);
Пример #10
0
		internal static extern int ENetHostService(IntPtr host, ENetEvent ev, uint timeout);
Пример #11
0
		internal static extern int ENetHostCheckEvents(IntPtr host, ENetEvent ev);
Пример #12
0
		internal void OnDisconnect(ENetEvent eNetEvent)
		{
			disconnect();
		}
Пример #13
0
		internal void OnReceived(ENetEvent eNetEvent)
		{
			// 将包放到缓存队列
			using (UPacket packet = new UPacket(eNetEvent.Packet))
			{
				byte[] bytes = packet.Bytes;
				this.RecvQueue.Enqueue(bytes);
			}
			this.received();
		}
Пример #14
0
 internal static extern int enet_host_check_events(IntPtr host, ref ENetEvent ev);
Пример #15
0
		private void OnAccepted(ENetEvent eEvent)
		{
			if (eEvent.Type == EventType.Disconnect)
			{
				this.AcceptTcs.TrySetException(new Exception("socket disconnected in accpet"));
			}
			
			USocket socket = new USocket(eEvent.Peer, this);
			this.USocketManager.Add(socket.PeerPtr, socket);
			socket.OnAccepted();

			var tcs = this.AcceptTcs;
			this.AcceptTcs = null;
			tcs.SetResult(socket);
		}
Пример #16
0
 internal void OnDisconnect(ENetEvent eNetEvent)
 {
     disconnect();
 }