void OnListTableCommandReceived(AbstractCommand command, IBluffinClient client)
 {
     var c = (ListTableCommand)command;
     var r = c.ResponseSuccess();
     r.Tables = Lobby.ListTables(c.LobbyTypes);
     client.SendCommand(r);
 }
 void OnIdentifyCommandReceived(AbstractCommand command, IBluffinClient client)
 {
     var c = (IdentifyCommand)command;
     var ok = !Lobby.IsNameUsed(c.Name) && !DataManager.Persistance.IsDisplayNameExist(c.Name);
     Logger.LogInformation("> Client indentifying QuickMode server as : {0}. Success={1}", c.Name, ok);
     if (ok)
     {
         client.PlayerName = c.Name;
         Logger.LogClientIdentified(client);
         client.SendCommand(c.ResponseSuccess());
         Lobby.AddName(c.Name);
     }
     else
     {
         client.SendCommand(c.ResponseFailure(BluffinMessageId.NameAlreadyUsed,"The name is already used on the server!"));
     }
 }
 public void Send(AbstractCommand c)
 {
     LobbyCommands.Add(new CommandEntry(){Client = m_Client,Command = c});
 }
 public void SendCommand(AbstractCommand command)
 {
     m_Server.ServerSendedCommands.Add(new CommandEntry() { Client = this, Command = command });
 }
        private void OnCheckCompatibilityCommandReceived(AbstractCommand command, IBluffinClient client)
        {
            const string minimumClientVersion = "3.0";
            const string currentServerVersion = "3.0.0";

            var c = (CheckCompatibilityCommand)command;
            Version vClient; 
            bool ok = Version.TryParse(c.ImplementedProtocolVersion,out vClient);
            if (!ok || vClient < new Version(minimumClientVersion))
            {
                var r = c.ResponseFailure(BluffinMessageId.NotSupported, "The client must implement at least protocol version " + minimumClientVersion);
                r.ImplementedProtocolVersion = currentServerVersion;
                client.SendCommand(r);
            }
            else
            {
                var r = c.ResponseSuccess();
                r.ImplementedProtocolVersion = currentServerVersion;
                r.SupportedLobbyTypes = new[] {LobbyTypeEnum.QuickMode, LobbyTypeEnum.RegisteredMode};
                r.AvailableGames = new[]
                {
                    new GameInfo
                    {
                        AvailableBlinds = new [] {BlindTypeEnum.Blinds},
                        AvailableLimits = new []{LimitTypeEnum.NoLimit},
                        AvailableVariants = RuleFactory.Variants.Values.Where(x => x.GameType == GameTypeEnum.CommunityCardsPoker).Select(x => x.Variant).ToArray(),
                        GameType = GameTypeEnum.CommunityCardsPoker,
                        MaxPlayers = 10,
                        MinPlayers = 2
                    },
                    new GameInfo
                    {
                        AvailableBlinds = new [] {BlindTypeEnum.Antes},
                        AvailableLimits = new []{LimitTypeEnum.NoLimit},
                        AvailableVariants = RuleFactory.Variants.Values.Where(x => x.GameType == GameTypeEnum.StudPoker).Select(x => x.Variant).ToArray(),
                        GameType = GameTypeEnum.StudPoker,
                        MaxPlayers = 10,
                        MinPlayers = 2
                    },
                    new GameInfo
                    {
                        AvailableBlinds = new [] {BlindTypeEnum.Antes},
                        AvailableLimits = new []{LimitTypeEnum.NoLimit},
                        AvailableVariants = RuleFactory.Variants.Values.Where(x => x.GameType == GameTypeEnum.DrawPoker).Select(x => x.Variant).ToArray(),
                        GameType = GameTypeEnum.DrawPoker,
                        MaxPlayers = 10,
                        MinPlayers = 2
                    }
                };
                client.SendCommand(r);
            }
        }
 void OnDisconnectCommandReceived(AbstractCommand command, IBluffinClient client)
 {
     Logger.LogInformation("> Client disconnected: {0}", client.PlayerName);
     Lobby.RemoveName(client.PlayerName);
 }
 private void OnLeaveTableCommandReceived(AbstractCommand command, IBluffinClient client)
 {
     var c = (LeaveTableCommand)command;
     var game = (PokerGame)Lobby.GetGame(c.TableId);
     game.LeaveGame(game.Table.Players.Single(x => x.Name == client.PlayerName));
 }
 private void OnCreateTableCommandReceived(AbstractCommand command, IBluffinClient client)
 {
     var c = (CreateTableCommand)command;
     var res = Lobby.CreateTable(c);
     var r = c.ResponseSuccess();
     Logger.LogInformation("> Client '{0}' {3}: {2}:{1}", client.PlayerName, c.Params.TableName, res, c.Params.Lobby.OptionType);
     r.IdTable = res;
     client.SendCommand(r);
 }
        private void OnJoinTableCommandReceived(AbstractCommand command, IBluffinClient client)
        {
            var c = (JoinTableCommand)command;
            var game = (PokerGame)Lobby.GetGame(c.TableId);
            var table = game.Table;
            if (!game.IsRunning)
            {
                client.SendCommand(c.ResponseFailure(BluffinMessageId.WrongTableState, "You can't join a game that isn't running !"));
                return;
            }
            if (table.ContainsPlayer(client.PlayerName))
            {
                client.SendCommand(c.ResponseFailure(BluffinMessageId.NameAlreadyUsed, "Someone with your name is already in this game !"));
                return;
            }
            var rp = new RemotePlayer(game, new PlayerInfo(client.PlayerName, 0), client, Server, c.TableId);
            if (!rp.JoinGame())
            {
                client.SendCommand(c.ResponseFailure(BluffinMessageId.SpecificServerMessage, "Unknown failure"));
                return;
            }

            client.AddPlayer(rp);

            Logger.LogInformation("> Client '{0}' joined {2}:{1}", client.PlayerName, table.Params.TableName, c.TableId, rp.Player.NoSeat);


            var r = c.ResponseSuccess();

            r.GameHasStarted = rp.Game.IsPlaying;
            r.BoardCards = rp.Game.Table.Cards.Select(x => x.ToString()).ToArray();
            r.Seats = rp.AllSeats().ToList();
            r.Params = rp.Game.Table.Params;
            r.TotalPotAmount = rp.Game.Table.TotalPotAmnt;
            r.PotsAmount = rp.Game.Table.PotAmountsPadded.ToList();

            client.SendCommand(r);
        }
 private void OnCheckDisplayExistCommandReceived(AbstractCommand command, IBluffinClient client)
 {
     var c = (CheckDisplayExistCommand)command;
     var r = c.ResponseSuccess();
     r.Exist = Lobby.IsNameUsed(c.DisplayName) || DataManager.Persistance.IsDisplayNameExist(c.DisplayName);
     client.SendCommand(r);
 }
 private void OnCheckUserExistCommandReceived(AbstractCommand command, IBluffinClient client)
 {
     var c = (CheckUserExistCommand)command;
     var r = c.ResponseSuccess();
     r.Exist = DataManager.Persistance.IsUsernameExist(c.Username);
     client.SendCommand(r);
 }
        private void OnCreateUserCommandReceived(AbstractCommand command, IBluffinClient client)
        {
            var c = (CreateUserCommand)command;
            var ok = false;
            if (!DataManager.Persistance.IsUsernameExist(c.Username))
            {
                if (!DataManager.Persistance.IsDisplayNameExist(c.DisplayName))
                {
                    DataManager.Persistance.Register(new UserInfo(c.Username, c.Password, c.Email, c.DisplayName, 7500));
                    ok = true;
                    client.SendCommand(c.ResponseSuccess());
                }
                else
                    client.SendCommand(c.ResponseFailure(BluffinMessageId.NameAlreadyUsed, "The display name is already used on the server!"));
            }
            else
                client.SendCommand(c.ResponseFailure(BluffinMessageId.UsernameAlreadyUsed, "The username is already used on the server!"));

            Logger.LogInformation("> Client register to RegisteredMode Server as : {0}. Success={1}", c.Username, ok);
        }
        private void OnAuthenticateUserCommandReceived(AbstractCommand command, IBluffinClient client)
        {
            var c = (AuthenticateUserCommand)command;
            var u = DataManager.Persistance.Get(c.Username);

            var ok = false;
            if (u != null)
            {
                client.PlayerName = u.DisplayName;
                if (DataManager.Persistance.Authenticate(c.Username, c.Password) != null)
                {
                    if (!Lobby.IsNameUsed(client.PlayerName))
                    {
                        Lobby.AddName(client.PlayerName);
                        ok = true;
                        client.SendCommand(c.ResponseSuccess());
                    }
                    else
                        client.SendCommand(c.ResponseFailure(BluffinMessageId.NameAlreadyUsed, "The name is already used on the server!"));
                }
                else
                    client.SendCommand(c.ResponseFailure(BluffinMessageId.InvalidPassword, "Wrong Password!"));
            }
            else
                client.SendCommand(c.ResponseFailure(BluffinMessageId.UsernameNotFound, "Your username was not in the database!"));
            Logger.LogInformation("> Client authenticate to RegisteredMode Server as : {0}. Success={1}", c.Username, ok);
        }
 private void OnGetUserCommandReceived(AbstractCommand command, IBluffinClient client)
 {
     var c = (GetUserCommand)command;
     var u = DataManager.Persistance.Get(client.PlayerName);
     if(u == null)
         client.SendCommand(c.ResponseFailure(BluffinMessageId.UsernameNotFound, "Your username was not in the database. That's weird !"));
     else
     {
         var r = c.ResponseSuccess();
         r.Email = u.Email;
         r.DisplayName = u.DisplayName;
         r.Money = u.TotalMoney;
         client.SendCommand(r);
     }
 }