예제 #1
0
        public void DispatchToListenerTest()
        {
            ENetEvent ev;

            var listener = new Listener();

            void setEvent(ENetEventType type)
            {
                var native = new NativeENetEvent
                {
                    Type = type
                };

                ev = new ENetEvent(native);
            }

            setEvent(ENetEventType.Connect);
            Assert.IsTrue(ev.DisptachTo(listener));
            Assert.IsTrue(listener.OnConnectCalled);

            setEvent(ENetEventType.Disconnect);
            Assert.IsTrue(ev.DisptachTo(listener));
            Assert.IsTrue(listener.OnDisconnectCalled);

            setEvent(ENetEventType.Receive);
            Assert.IsTrue(ev.DisptachTo(listener));
            Assert.IsTrue(listener.OnReceiveCalled);

            setEvent(ENetEventType.None);
            Assert.IsFalse(ev.DisptachTo(listener));
        }
예제 #2
0
        private void Run()
        {
            ENetEvent eNetEvent = new ENetEvent();

            while (_running)
            {
                int result = _eNetHost.Service(eNetEvent, 1000);
                _logger.Info($"Result: {result}");
                switch (eNetEvent.Type)
                {
                case ENetEventType.ENET_EVENT_TYPE_CONNECT:
                    _logger.Info(
                        $"A new client connected from: {eNetEvent.Peer.Address.Address}:{eNetEvent.Peer.Address.Port}");
                    break;

                case ENetEventType.ENET_EVENT_TYPE_RECEIVE:
                    _logger.Info(
                        $"A packet of length {eNetEvent.Packet.DataLength} was received from {eNetEvent.Peer.Address.Address}:{eNetEvent.Peer.Address.Port} on channel {eNetEvent.ChannelId}");
                    ENetPacket packet = new ENetPacket();
                    packet.Data       = Encoding.UTF8.GetBytes("Test Response\0");
                    packet.DataLength = (uint)packet.Data.Length;
                    packet.Flags      = ENetPacketFlags.ENET_PACKET_FLAG_RELIABLE;
                    eNetEvent.Peer.Send(eNetEvent.ChannelId, packet);
                    break;

                case ENetEventType.ENET_EVENT_TYPE_DISCONNECT:
                    _logger.Info(
                        $"Client {eNetEvent.Peer.Address.Address}:{eNetEvent.Peer.Address.Port} disconnected");
                    break;
                }
            }
        }
예제 #3
0
    void PushEvent(ENetEvent eEvent, int nParam)
    {
        NetEvent netEvent = new NetEvent();

        netEvent.eEvent = eEvent;
        netEvent.nParam = nParam;

        lock (mLocker)
        {
            mEvents.Add(netEvent);
        }
    }
예제 #4
0
        public void netLoop()
        {
            update();

            var enetEvent = new ENetEvent();

            while (true)
            {
                while (enet_host_service(_server, &enetEvent, 0) > 0)
                {
                    switch (enetEvent.type)
                    {
                    case EventType.Connect:
                        //Logging->writeLine("A new client connected: %i.%i.%i.%i:%i", event.peer->address.host & 0xFF, (event.peer->address.host >> 8) & 0xFF, (event.peer->address.host >> 16) & 0xFF, (event.peer->address.host >> 24) & 0xFF, event.peer->address.port);

                        /* Set some defaults */
                        enetEvent.peer->mtu = PEER_MTU;
                        enetEvent.data      = 0;
                        break;

                    case EventType.Receive:
                        currentPeer = enetEvent.peer;
                        if (!PacketHandlerManager.getInstace().handlePacket(enetEvent.peer, enetEvent.packet, (Channel)enetEvent.channelID))
                        {
                            //enet_peer_disconnect(event.peer, 0);
                        }

                        /* Clean up the packet now that we're done using it. */
                        enet_packet_destroy(enetEvent.packet);
                        break;

                    case EventType.Disconnect:
                        handleDisconnect(enetEvent.peer);
                        break;
                    }
                }
                Thread.Sleep((int)REFRESH_RATE);
            }
        }
예제 #5
0
파일: Native.cs 프로젝트: NitroXenon/Ignite
 public static extern int enet_host_service(ENetHost* host, out ENetEvent @event, uint timeout);
예제 #6
0
파일: Native.cs 프로젝트: NitroXenon/Ignite
 public static extern int enet_host_check_events(ENetHost* host, out ENetEvent @event);
예제 #7
0
 static extern int native_host_service(ENetHost* host, out ENetEvent @event, uint timeout);
예제 #8
0
 static extern int native_host_check_events(ENetHost* host, out ENetEvent @event);
예제 #9
0
 public override int host_service(ENetHost* host, out ENetEvent @event, uint timeout)
 {
     return native_host_service(host, out @event, timeout);
 }
예제 #10
0
 public override int host_check_events(ENetHost* host, out ENetEvent @event)
 {
     return native_host_check_events(host, out @event);
 }
예제 #11
0
 public abstract int host_service(ENetHost* host, out ENetEvent @event, uint timeout);
예제 #12
0
 public abstract int host_check_events(ENetHost* host, out ENetEvent @event);
예제 #13
0
 public static int enet_host_service(ENetHost* host, out ENetEvent @event, uint timeout)
 {
     return Platform.host_service(host, out @event, timeout);
 }
예제 #14
0
 public static int enet_host_check_events(ENetHost* host, out ENetEvent @event)
 {
     return Platform.host_check_events(host, out @event);
 }
예제 #15
0
파일: Game.cs 프로젝트: horato/IntWarsSharp
        public void netLoop()
        {
            update();

            var enetEvent = new ENetEvent();
            while (true)
            {
                while (enet_host_service(_server, &enetEvent, 0) > 0)
                {
                    switch (enetEvent.type)
                    {
                        case EventType.Connect:
                            //Logging->writeLine("A new client connected: %i.%i.%i.%i:%i", event.peer->address.host & 0xFF, (event.peer->address.host >> 8) & 0xFF, (event.peer->address.host >> 16) & 0xFF, (event.peer->address.host >> 24) & 0xFF, event.peer->address.port);

                            /* Set some defaults */
                            enetEvent.peer->mtu = PEER_MTU;
                            enetEvent.data = 0;
                            break;

                        case EventType.Receive:
                            currentPeer = enetEvent.peer;
                            if (!PacketHandlerManager.getInstace().handlePacket(enetEvent.peer, enetEvent.packet, (Channel)enetEvent.channelID))
                            {
                                //enet_peer_disconnect(event.peer, 0);
                            }

                            /* Clean up the packet now that we're done using it. */
                            enet_packet_destroy(enetEvent.packet);
                            break;

                        case EventType.Disconnect:
                            handleDisconnect(enetEvent.peer);
                            break;
                    }
                }
                Thread.Sleep((int)REFRESH_RATE);
            }
        }
예제 #16
0
 public NetEvent(ENetEvent e, string d)
 {
     evt  = e;
     data = d;
 }