Exemplo n.º 1
0
 private void HandleKey(char keyChar)
 {
     if ('1' == keyChar)
     {
         ScenceController.curScence = ScenceController.scenceDict["room"];
         MsgListRoom msgListRoom = new MsgListRoom();
         NetManagerEvent.Send(msgListRoom);
     }
     else if ('2' == keyChar)
     {
     }
     else if ('3' == keyChar)
     {
     }
     else if ('4' == keyChar)
     {
     }
     else if ('5' == keyChar)
     {
         ScenceController.isLeavel = true;
         NetManagerEvent.Close();
     }
     else
     {
         Handle();
     }
 }
Exemplo n.º 2
0
 public static void InitNet()
 {
     NetManagerEvent.AddListener("MsgEnter", OnEnter);
     NetManagerEvent.AddListener("MsgMove", OnMove);
     NetManagerEvent.AddListener("MsgLeave", OnLeave);
     NetManagerEvent.AddListener("MsgAttack", OnAttack);
     NetManagerEvent.AddListener("MsgRegistry", OnRegistry);
     NetManagerEvent.AddListener("MsgLogin", OnLogin);
     NetManagerEvent.AddListener("MsgListRoom", OnListRoom);
     NetManagerEvent.AddListener("MsgEnterRoom", OnEnterRoom);
     NetManagerEvent.AddListener("MsgGetRoomInfo", OnGetRoomInfo);
     NetManagerEvent.AddListener("MsgLeaveRoom", OnLeaveRoom);
     NetManagerEvent.AddListener("MsgPrepare", OnPrepare);
     NetManagerEvent.AddListener("MsgUnprepare", OnUnprepare);
     NetManagerEvent.AddListener("MsgStartBattle", OnStartBattle);
     NetManagerEvent.AddListener("MsgEndBattle", OnEndBattle);
     NetManagerEvent.Connect("192.168.1.178", 8888);
 }
Exemplo n.º 3
0
    private IEnumerator WaitForConnectAndCall(NetManagerEvent NetEvent)
    {
        Debug.LogWarning("Need to reconect to take action");
        while (!PhotonNetwork.connectedAndReady)
        {
            yield return(new WaitForSeconds(0.05f));
        }
        yield return(new WaitForSeconds(2f));

        while (!PhotonNetwork.connectedAndReady)
        {
            yield return(new WaitForSeconds(0.05f));
        }        //double check
        if (NetEvent != null)
        {
            NetEvent();
        }
    }
Exemplo n.º 4
0
        private void handleKey(ConsoleKey key)
        {
            switch (key)
            {
            case ConsoleKey.UpArrow:
                player.Velocity.Veloctity = Component.Veloctity.up;
                player.IsMove             = true;
                break;

            case ConsoleKey.DownArrow:
                player.Velocity.Veloctity = Component.Veloctity.down;
                player.IsMove             = true;
                break;

            case ConsoleKey.LeftArrow:
                player.Velocity.Veloctity = Component.Veloctity.left;
                player.IsMove             = true;
                break;

            case ConsoleKey.RightArrow:
                player.Velocity.Veloctity = Component.Veloctity.right;
                player.IsMove             = true;
                break;

            case ConsoleKey.Spacebar:
                player.IsMove = false;
                break;

            case ConsoleKey.A:
                if (player.AttchInterval == 5)
                {
                    MsgAttack msgAttack = new MsgAttack();
                    msgAttack.playId = player.Id;
                    NetManagerEvent.Send(msgAttack);
                    player.AttchInterval = 1;
                }
                break;

            default:
                break;
            }
        }
Exemplo n.º 5
0
        public void Execute()
        {
            List <Sprite> players = scence.sprites.Where(spirte => spirte is Player).ToList();

            foreach (Player player in players)
            {
                if (autoPlayer.Contains(player) && player.AttchInterval == 5)
                {
                    MsgAttack msgAttack = new MsgAttack();
                    msgAttack.playId = player.Id;
                    NetManagerEvent.Send(msgAttack);
                    player.AttchInterval = 1;
                }
                else
                {
                    if (player.AttchInterval < 5)
                    {
                        player.AttchInterval += 1;
                    }
                }
            }
        }
Exemplo n.º 6
0
        public void Execute()
        {
            var sprites = scence.sprites;
            //碰撞监听
            Player player = (Player)sprites.Where(sprite => sprite.GetType() == typeof(Player) && sprite.Id == ScenceController.user.Userid).FirstOrDefault();

            if (player != null)
            {
                List <Sprite> skills = sprites.Where(sprite => sprite.GetType() == typeof(Skill)).ToList();
                for (int j = skills.Count - 1; j >= 0; j--)
                {
                    if (player.Position.X == skills[j].Position.X && player.Position.Y == skills[j].Position.Y)
                    {
                        SpriteDestorySystem spriteDestorySystem = SpriteDestorySystem.GetSpriteDestorySystem();
                        spriteDestorySystem.sprites.Enqueue(player);
                        MsgLeave msgLeave = new MsgLeave
                        {
                            playId = player.Id
                        };
                        NetManagerEvent.Send(msgLeave);
                    }
                }
            }
        }
Exemplo n.º 7
0
 public virtual Task Execute(IJobExecutionContext context)
 {
     NetManagerEvent.Update();
     return(null);
 }
        // Start is called before the first frame update
        private void Start()
        {
            // UDP Socket Listener/Sender initialization
            _socket         = new UdpSocket();
            _socketListener = new AsyncUdpSocketListener(_socket);
            _socketSender   = new AsyncUdpSocketSender(_socket);

            // Add to RingBuffer from listener async callbacks which happen off the main thread
            _socketListener.ReceivedUdpMessageEvent += AddUdpMessageToReceivedBuffer;

            // Init ring buffers
            _receivedMessageBuffer = RingBuffer <UdpMessage> .Create(
                ProducerType.Single,
                UdpMessage.DefaultFactory,
                256,
                new BusySpinWaitStrategy());

            _receivedMessagePoller = _receivedMessageBuffer.NewPoller();
            _receivedMessageBuffer.AddGatingSequences(_receivedMessagePoller.Sequence);

            _outgoingMessageBuffer = RingBuffer <OutgoingUdpMessage> .Create(
                ProducerType.Single,
                OutgoingUdpMessage.DefaultFactory,
                256,
                new BusySpinWaitStrategy());

            _outgoingMessagePoller = _outgoingMessageBuffer.NewPoller();
            _outgoingMessageBuffer.AddGatingSequences(_outgoingMessagePoller.Sequence);

            // This makes a deep copy of the sent message before publishing it to the outgoing message buffer
            // It makes a deep copy because the buffers containing the data in the main thread could change
            // before the data has a chance to be copied into the ring buffer. Prob want to think of a way around this.. maybe more ring buffers
            _outgoingUdpMessageSender = new RingBufferOutgoingUdpMessageSender(_outgoingMessageBuffer);

            // The NetManager reactor. TODO: Benchmark and see if I have actually made any improvement by implementing disruptor
            // Though I do like the idea of clearing up the locks and doing all the logic in the main thread esp since
            // the game server will need to routinely access connected client info
            RNetManager = new NetManager(null, _outgoingUdpMessageSender)
            {
                DisconnectTimeout = 600
            };
            RGameReactor.RNetManager = RNetManager;
            _updateEvent             = new GameEvent {
                EventId = GameEvent.Event.Update
            };
            _tempEvent = new GameEvent(); // reusable event for the update loop

            //if (!ShouldBind)
            //{
            //RNetManager.SimulateLatency = true;
            RNetManager.SimulatePacketLoss = true;
            //    R_NetManager.SimulationMaxLatency = 10;
            //    R_NetManager.SimulationMinLatency = 0;
            //}

            _cancellationSource = new CancellationTokenSource();
            _processOutgoing    = new Thread(SendOutgoingUdpMessages)
            {
                IsBackground = true,
                Name         = "UdpServer"
            };

            // Every frame the previous frames events get replaced with new output events created by the NetManager reactor for that frame
            _batchedEvents = new NetManagerEvent[MaxUdpMessagesPerFrame];
            for (int i = 0; i < MaxUdpMessagesPerFrame; i++)
            {
                _batchedEvents[i] = new NetManagerEvent {
                    EventId = NetManagerEvent.Event.UdpMessage
                }
            }
            ;

            // BIND
            if (ShouldBind)
            {
                _socket.BindLocalIpv4(BindAddress, BindPort);
            }

            // CONNECT - TEMPORARY - NEEDS TO BE SOME SORT OF STATE MACHINE
            if (ShouldConnect)
            {
                RNetManager.Connect(ConnectAddress, ConnectPort, "somekey");
            }

            // No point actually awaiting this call.. it kicks off a
            // recurring execution where the finish method always calls the start method again
#pragma warning disable 4014
            _socketListener.StartAsyncReceive();
#pragma warning restore 4014


            // Start thread that polls for outgoing udp messages and sends them on the socket
            _processOutgoing.Start(new object[] { _socketSender, _outgoingMessagePoller, _cancellationSource.Token });

            // Start coroutine that will send the check timeout event
            StartCoroutine("SendCheckTimeoutEvent");
        }