/// <summary>Joins the lobby and sends a lobby join request to the server</summary>
        /// <param name="lobbyindex">The lobby index.</param>
        public void JoinLobby(int lobbyindex)
        {
            ServerVisibility = ConstantsModel.HIDDEN;
            LobbyVisibility  = ConstantsModel.VISIBLE;

            PacketSend.ClientLobbyJoin(Lobbies[lobbyindex].UID);
        }
        /// <summary>Sets the ready.</summary>
        public void SetReady()
        {
            ClientManager.Instance.playersInSession[ClientManager.Instance.MyID].Status = 1;
            ReadyEnabled = "False";

            PacketSend.ClientStatus(1);
        }
示例#3
0
        /// <summary>The GameLobbyInstance class stores lobby information for a single lobby instance. It stores lobby PlayerCount,
        /// Name, IsFull, and the lobby UID</summary>
        public static void ProcessCommand(string cmd)
        {
            string[] tokens = cmd.Split(" ");

            switch (tokens[0])
            {
            case "/help":
                Console.WriteLine(Constants.DO_HELP);
                break;

            case "/kick":
                Console.WriteLine(Constants.DO_KICK);
                Kick(tokens[1]);
                break;

            case "/exit":
                Console.WriteLine(Constants.DO_SHUTDOWN);
                Environment.Exit(0);
                break;

            case "/disconnect":
                Console.WriteLine(Constants.DO_DISCONNECT);
                PacketSend.ServerDisconnect();
                break;

            default:
                Console.WriteLine(Constants.UNKNOWN);
                break;
            }
        }
示例#4
0
        private void _processClientPackets()
        {
            if (_isClosing || !_doPacketProcess)
            {
                return;
            }
            _localRecvPackets = _localSecurity.TransferIncoming();
            if (_localRecvPackets != null)
            {
                foreach (var packet in _localRecvPackets)
                {
                    if (packet.Opcode == 0x5000 || packet.Opcode == 0x9000 || packet.Opcode == 0x2001)
                    {
                        continue;
                    }

                    //Send to PacketHandler
                    PacketReceived?.Invoke(packet);
                }
            }

            _localSendBuffers = _localSecurity.TransferOutgoing();
            if (_localSendBuffers == null)
            {
                return;
            }
            foreach (var buffer in _localSendBuffers)
            {
                PacketSend?.Invoke(buffer.Value);
                Send(buffer.Key.Buffer);
            }
        }
        /// <summary>Queues the user again by reconnecting them to the lobby.</summary>
        public void queueAgain()
        {
            ClientManager.Instance.playersInSession[ClientManager.Instance.MyID].ResetState();

            PacketSend.ClientStatus(0);

            mainWindow.SetNewView(Screens.MULTIPLAYER_MENU_RC);
        }
        private void EndGame()
        {
            gameOver = true;
            eventTimer.Stop();
            encoderTimer.Stop();
            myEvents.getAggregator().PublishOnUIThread(new GameOverEvent(gameOver));

            PacketSend.ClientGameOver(gameOver);
        }
        /// <summary>Handles the MultiplayerNewGameEvent event.</summary>
        /// <param name="message">The message.</param>
        public void Handle(MultiplayerNewGameEvent message)
        {
            ClientManager.Instance.playersInSession[ClientManager.Instance.MyID].Status = 2;
            myEvents.getAggregator().Unsubscribe(this);

            PacketSend.ClientStatus(2);

            LoadMultiPlayer();
        }
        /// <summary>Attempts to reconnect to the previous address.</summary>
        public void AttemptReconnect()
        {
            string[] ipAndPort = ParseInputIP();

            PacketSend.ClientReconnect();
            ConnectEnabled = "False";

            myEvents.getAggregator().PublishOnUIThread(new ClientConnectedEvent(ipAndPort, true));
        }
        /// <summary>Creates a lobby and sends a lobby create request to the server.</summary>
        public void CreateLobby()
        {
            if (Lobbies.Count < 4)
            {
                PacketSend.ClientLobbyCreate();

                ServerVisibility = ConstantsModel.HIDDEN;
                LobbyVisibility  = ConstantsModel.VISIBLE;
            }
        }
示例#10
0
 public void Send(byte[] packet)
 {
     if (packet.Length > 0)
     {
         lock (syncLock) {
             socket.Send(BitConverter.GetBytes(packet.Length));
             socket.Send(packet);
             TotalBytesSend += packet.Length;
             PacketSend?.Invoke(this, packet.Length);
         }
     }
 }
示例#11
0
        /// <summary>Kicks the specified player. If multiple players with the same name are connected, kick only the first found one.</summary>
        /// <param name="player">The player.</param>
        private static void Kick(string player)
        {
            foreach (GameClientInstance x in GameServer.connectedClients.Values)
            {
                if (x.UserName == player)
                {
                    PacketSend.ServerKick(x.UID);
                    return;
                }
            }

            Console.WriteLine(Constants.USER_NOT_FOUND_ERROR + player);
        }
        private void EncodeGrid(object sender, ElapsedEventArgs e)
        {
            this.Dispatcher.Invoke(() =>
            {
                string encodedGrid = "";

                for (int i = 1; i < (col - 1); i++)
                {
                    for (int j = 1; j < row; j++)
                    {
                        encodedGrid += Array.IndexOf(TILE_ARRAY, cell[i, j].Background);
                    }
                }

                PacketSend.ClientGrid(encodedGrid);
            });
        }
示例#13
0
        ///<summary>Remove a player from the lobby. If the lobby becomes empty, remove this lobby from the lobby list and dispose this.</summary>
        ///<param name="player">Client to remove from the lobby</param>
        ///<remarks> This function sends a "LobbyList" packet.</remarks>
        public void RemovePlayer(GameClientInstance player)
        {
            if (playersInLobby.Contains(player))
            {
                playersInLobby.Remove(player);
                PlayerCount--;

                IsFull = false;
            }

            if (PlayerCount == 0)
            {
                GameServer.openLobbies.Remove(UID);

                Console.WriteLine(Name + Constants.LOBBY_CLOSED);

                PacketSend.LobbyList();
            }
        }
        private void CalculateScore()
        {
            int multiplier = 0;

            switch (clearedRows)
            {
            case 0:
                break;

            case 1:
                multiplier = 100;
                break;

            case int n when(n == 2 || n == 3):
                multiplier = 200;

                break;

            case 4:
                multiplier = 500;
                break;

            case 5:
                multiplier = 1000;
                break;

            default:
                multiplier = 1500;
                break;
            }

            if (multiplier != 0)
            {
                audioManager.PlaySound(Sound.CLEARED_ROW);
            }

            score       = (score + (clearedRows * multiplier));
            clearedRows = 0;
            myEvents.getAggregator().PublishOnUIThread(new ScoreEvent(score));

            PacketSend.ClientScore(score);
        }
示例#15
0
        private void _processServerPackets()
        {
            if (_isClosing || !_doPacketProcess)
            {
                return;
            }

            #region Handle Recive

            _remoteRecvPackets = _remoteSecurity.TransferIncoming();
            if (_remoteRecvPackets != null)
            {
                foreach (var packet in _remoteRecvPackets.Where(packet => packet.Opcode != 0x5000 && packet.Opcode != 0x9000))
                {
                    //RaiseEvent if event is assigned.
                    PacketReceived?.Invoke(packet);
                }
            }

            #endregion

            #region Handle Send

            _remoteSendBuffers = _remoteSecurity.TransferOutgoing();
            if (_remoteSendBuffers == null)
            {
                return;
            }
            foreach (var buffer in _remoteSendBuffers)
            {
                PacketSend?.Invoke(buffer.Value);
                Send(buffer.Key.Buffer);
            }

            #endregion
        }
        public static ArrByte64K GetPacket(OperationResponse response)
        {
            PacketSend packetSend = PacketSend.Create(response.OperationCode, PacketSend.CodeType.OperationCode);

            packetSend.SetReturnCode(response.ReturnCode);
            if (response.Parameters != null)
            {
                foreach (var parameter in response.Parameters)
                {
                    packetSend.Write((byte)parameter.Key);
                    //添加value的值类型,如int,byte,string,等
                    if (parameter.Value.GetType() == typeof(byte))
                    {
                        packetSend.Write((byte)ValueType.Byte);
                        packetSend.Write((byte)parameter.Value);
                    }
                    else if (parameter.Value.GetType() == typeof(int))
                    {
                        packetSend.Write((byte)ValueType.Int32);
                        packetSend.Write((int)parameter.Value);
                    }
                    else if (parameter.Value.GetType() == typeof(string))
                    {
                        packetSend.Write((byte)ValueType.String);
                        packetSend.Write((string)parameter.Value);
                    }
                    else if (parameter.Value.GetType().IsEnum)
                    {
                        packetSend.Write((byte)ValueType.EnumInt);
                        packetSend.Write((int)parameter.Value);
                    }
                    else if (parameter.Value.GetType() == typeof(bool))
                    {
                        packetSend.Write((byte)ValueType.Boolean);
                        packetSend.Write((bool)parameter.Value);
                    }
                    else if (parameter.Value.GetType() == typeof(sbyte))
                    {
                        packetSend.Write((byte)ValueType.SByte);
                        packetSend.Write((sbyte)parameter.Value);
                    }
                    else if (parameter.Value.GetType() == typeof(short))
                    {
                        packetSend.Write((byte)ValueType.Int16);
                        packetSend.Write((short)parameter.Value);
                    }

                    else if (parameter.Value.GetType() == typeof(long))
                    {
                        packetSend.Write((byte)ValueType.Int64);
                        packetSend.Write((long)parameter.Value);
                    }
                    else if (parameter.Value.GetType() == typeof(ushort))
                    {
                        packetSend.Write((byte)ValueType.UInt16);
                        packetSend.Write((ushort)parameter.Value);
                    }
                    else if (parameter.Value.GetType() == typeof(uint))
                    {
                        packetSend.Write((byte)ValueType.UInt32);
                        packetSend.Write((uint)parameter.Value);
                    }
                    else if (parameter.Value.GetType() == typeof(ulong))
                    {
                        packetSend.Write((byte)ValueType.UInt64);
                        packetSend.Write((ulong)parameter.Value);
                    }
                    else
                    {
                    }
                }
            }

            return(packetSend.CreateArrByte64K());
        }
示例#17
0
 private void OnPacketSend(string packet)
 {
     PacketSend?.Invoke(packet);
 }
示例#18
0
 protected bool OnPacketSend(string packet) => PacketSend == null || PacketSend.Invoke(packet);
示例#19
0
 private void ProtocolClient_PacketSend(ProtocolClient sender, int Send)
 {
     PacketSend?.Invoke(sender, Send);
 }