Esempio n. 1
0
    /// <summary>
    /// 创建实例
    /// </summary>
    public static CreatePlayerRequest create(CreatePlayerData data)
    {
        CreatePlayerRequest re = (CreatePlayerRequest)BytesControl.createRequest(dataID);

        re.data = data;
        return(re);
    }
Esempio n. 2
0
    /// <summary>
    /// 回池
    /// </summary>
    protected override void toRelease(DataPool pool)
    {
        base.toRelease(pool);

        this.data.release(pool);
        this.data = null;
    }
Esempio n. 3
0
    /** 创建登录数据 */
    public CreatePlayerData createCreatePlayerData()
    {
        CreatePlayerData data = GameC.factory.createCreatePlayerData();

        makeCreatePlayerData(data);

        return(data);
    }
Esempio n. 4
0
    private void createPlayer(System.Action <WWW> callback)
    {
        //logMessage("RedMetricsManager::createPlayer");
        CreatePlayerData data = new CreatePlayerData();
        string           json = getJsonString(data);

        sendDataStandalone(redMetricsPlayer, json, callback);
    }
Esempio n. 5
0
    /** 创建角色数据 */
    protected virtual CreatePlayerData getCreatePlayerData()
    {
        CreatePlayerData data = new CreatePlayerData();

        data.name     = createRandomName();
        data.sex      = SexType.Boy;
        data.vocation = VocationType.DefaultVocation;

        return(data);
    }
Esempio n. 6
0
        public SessionPlayer(Session session, BinaryReader reader)
        {
            this.session = session;
            id = reader.ReadInt32();
            try
            {
                BinaryFormatter bf = new BinaryFormatter();
                data = (CreatePlayerData)bf.Deserialize(reader.BaseStream);
            }
            catch(InvalidCastException)
            {
                throw new FormatException();
            }
            catch(SerializationException)
            {
                throw new FormatException();
            }

            control = new SessionPlayerControl(this);

            score = reader.ReadInt32();
            if(score < 0)
                throw new FormatException();
            turnsPlayed = reader.ReadInt32();
            if(turnsPlayed < 0)
                throw new FormatException();

            victories = reader.ReadInt32();
            if(victories < 0)
                throw new FormatException();

            int roleVicCount = reader.ReadInt32();
            roleVictories = new Dictionary<Role, int>(roleVicCount);
            for(int i = 0; i < roleVicCount; i++)
            {
                Role role = (Role)reader.ReadInt32();
                int vic = reader.ReadInt32();
                if(vic < 0)
                    throw new FormatException();
                roleVictories.Add(role, vic);
            }

            int characterVicCount = reader.ReadInt32();
            characterVictories = new Dictionary<CharacterType, int>(characterVicCount);
            for(int i = 0; i < characterVicCount; i++)
            {
                CharacterType character = (CharacterType)reader.ReadInt32();
                int vic = reader.ReadInt32();
                if(vic < 0)
                    throw new FormatException();
                characterVictories.Add(character, vic);
            }
        }
Esempio n. 7
0
    /// <summary>
    /// 复制(潜拷贝)
    /// </summary>
    protected override void toShadowCopy(BaseData data)
    {
        if (!(data is CreatePlayerData))
        {
            return;
        }

        CreatePlayerData mData = (CreatePlayerData)data;

        this.name     = mData.name;
        this.sex      = mData.sex;
        this.vocation = mData.vocation;
    }
Esempio n. 8
0
    protected override void copyData()
    {
        base.copyData();
        CreatePlayerData dataTemp = data;

        if (dataTemp != null)
        {
            this.data = (CreatePlayerData)dataTemp.clone();
        }
        else
        {
            this.data = null;
            nullObjError("data");
        }
    }
Esempio n. 9
0
        public SessionPlayer(int id, Session session, CreatePlayerData data)
        {
            this.id = id;
            this.session = session;
            this.data = data;
            control = new SessionPlayerControl(this);

            score = 0;
            turnsPlayed = 0;
            victories = 0;
            List<Role> roles = Utils.GetRoles();
            roleVictories = new Dictionary<Role, int>(roles.Count);
            foreach(Role role in roles)
                roleVictories[role] = 0;
            List<CharacterType> characters = Utils.GetCharacterTypes(session);
            characterVictories = new Dictionary<CharacterType, int>(characters.Count);
            foreach(CharacterType character in characters)
                characterVictories[character] = 0;
        }
Esempio n. 10
0
        protected override CreatePlayerData getCreatePlayerData()
        {
            if (!_g18)
            {
                _m18 = instance.Type.GetMethod("getCreatePlayerData", 0);
                _g18 = true;
            }

            if (_m18 != null && !_b18)
            {
                _b18 = true;
                CreatePlayerData re = (CreatePlayerData)appdomain.Invoke(_m18, instance, null);
                _b18 = false;
                return(re);
            }
            else
            {
                return(base.getCreatePlayerData());
            }
        }
Esempio n. 11
0
        public override void doCreatePlayer(CreatePlayerData data)
        {
            if (!_g20)
            {
                _m20 = instance.Type.GetMethod("doCreatePlayer", 1);
                _g20 = true;
            }

            if (_m20 != null && !_b20)
            {
                _b20   = true;
                _p1[0] = data;
                appdomain.Invoke(_m20, instance, _p1);
                _p1[0] = null;
                _b20   = false;
            }
            else
            {
                base.doCreatePlayer(data);
            }
        }
Esempio n. 12
0
    /// <summary>
    /// 是否数据一致
    /// </summary>
    protected override bool toDataEquals(BaseData data)
    {
        CreatePlayerData mData = (CreatePlayerData)data;

        if (this.name != mData.name)
        {
            return(false);
        }

        if (this.sex != mData.sex)
        {
            return(false);
        }

        if (this.vocation != mData.vocation)
        {
            return(false);
        }

        return(true);
    }
Esempio n. 13
0
        public override void makeCreatePlayerData(CreatePlayerData data)
        {
            if (!_g22)
            {
                _m22 = instance.Type.GetMethod("makeCreatePlayerData", 1);
                _g22 = true;
            }

            if (_m22 != null && !_b22)
            {
                _b22   = true;
                _p1[0] = data;
                appdomain.Invoke(_m22, instance, _p1);
                _p1[0] = null;
                _b22   = false;
            }
            else
            {
                base.makeCreatePlayerData(data);
            }
        }
Esempio n. 14
0
        protected override PlayerListData createSinglePlayer(CreatePlayerData createData)
        {
            if (!_g23)
            {
                _m23 = instance.Type.GetMethod("createSinglePlayer", 1);
                _g23 = true;
            }

            if (_m23 != null && !_b23)
            {
                _b23   = true;
                _p1[0] = createData;
                PlayerListData re = (PlayerListData)appdomain.Invoke(_m23, instance, _p1);
                _p1[0] = null;
                _b23   = false;
                return(re);
            }
            else
            {
                return(base.createSinglePlayer(createData));
            }
        }
Esempio n. 15
0
    /** 创建单人角色 */
    protected virtual PlayerListData createSinglePlayer(CreatePlayerData createData)
    {
        Player player = GameC.player;

        player.newInitData();

        RolePartData rolePartData = player.role.getPartData();

        //设置基础键组
        rolePartData.playerID     = 1;
        rolePartData.name         = createData.name;
        rolePartData.userID       = 1;
        rolePartData.uid          = getVisitorUID();
        rolePartData.createAreaID = 1;
        rolePartData.platform     = PlatformType.Visitor;
        rolePartData.isAdult      = true;

        SystemPartData systemPartData = player.system.getPartData();

        systemPartData.createDate = DateData.getNow();      //记录创建时间

        //逻辑相关
        player.role.doCreatePlayer(createData);

        //创建调用
        player.onNewCreate();

        //创建角色日志
        GameC.log.createPlayer(player);

        PlayerListData listData = player.createListData();

        player.writeListData(listData);

        return(listData);
    }
Esempio n. 16
0
 /// <summary>
 /// 执行创建角色(逻辑相关)
 /// </summary>
 public virtual void doCreatePlayer(CreatePlayerData data)
 {
     _d.sex      = data.sex;
     _d.vocation = data.vocation;
 }
Esempio n. 17
0
 public void Update(CreatePlayerData data)
 {
     if(!this.data.Password.CheckPassword(data.Password))
         throw new BadPlayerPasswordException();
     this.data = data;
 }
Esempio n. 18
0
 /// <summary>
 /// Creates a new AI player.
 /// </summary>
 public AIPlayer()
 {
     data = new CreatePlayerData(NextName(), null, "");
 }
Esempio n. 19
0
 public virtual void makeCreatePlayerData(CreatePlayerData data)
 {
     data.name     = getUniqueIdentifier();
     data.sex      = SexType.Boy;
     data.vocation = VocationType.DefaultVocation;
 }
Esempio n. 20
0
        public void Replace(int id, Password password, CreatePlayerData data, IPlayerSessionEventListener listener)
        {
            if(state == SessionState.Ended)
                throw new BadSessionStateException();
            lock(Lock)
            {
                if(!this.data.PlayerPassword.CheckPassword(password))
                    throw new BadSessionPasswordException();

                SessionPlayer player = GetPlayer(id);
                if(player.CheckListener() && !player.IsAI)
                    throw new CannotReplacePlayerException();
                player.Update(data);
                player.RegisterListener(listener);
                eventMgr.SendController(player);
                if(state == SessionState.Playing)
                    game.RegisterPlayer(player);
                eventMgr.OnPlayerUpdated(player);
                server.SaveState();
            }
        }
Esempio n. 21
0
        public void Join(Password password, CreatePlayerData data, IPlayerSessionEventListener listener)
        {
            if(state == SessionState.Ended)
                throw new BadSessionStateException();
            lock(Lock)
            {
                if(state != SessionState.WaitingForPlayers)
                    throw new BadSessionStateException();
                if(players.Count >= this.data.MaxPlayers)
                    throw new TooManyPlayersException();
                if(!this.data.PlayerPassword.CheckPassword(password))
                    throw new BadSessionPasswordException();

                int id = players.GenerateID();
                if(creatorId == 0)
                    creatorId = id;
                SessionPlayer player = new SessionPlayer(id, this, data);
                players.Add(id, player);
                playerList.Add(player);
                player.RegisterListener(listener);
                eventMgr.SendController(player);
                eventMgr.OnPlayerJoinedSession(player);
                server.SaveState();
            }
        }
 private void createPlayer(System.Action<WWW> callback)
 {
     //logMessage("RedMetricsManager::createPlayer");
     CreatePlayerData data = new CreatePlayerData();
     string json = getJsonString(data);
     sendDataStandalone(redMetricsPlayer, json, callback);
 }
Esempio n. 23
0
        public static void Main(string[] cmdArgs)
        {
            Console.Title = "Bang# Command-Line Client";
            ConsoleHelper.PrintLine("Bang# Command-Line Client");
            ConsoleHelper.PrintLine("-------------------------");
            ConsoleHelper.PrintLine("Interface version: {0}.{1}", Utils.InterfaceVersionMajor, Utils.InterfaceVersionMinor);
            ConsoleHelper.PrintLine("Operating system: {0}", Environment.OSVersion);
            ConsoleHelper.PrintLine("-------------------------");
            string address;
            string portString;
            if(cmdArgs.Length != 2)
            {
                ConsoleHelper.Print("Server Address: ");
                address = ConsoleHelper.ReadLine();
                ConsoleHelper.Print("Server Port: ");
                portString = ConsoleHelper.ReadLine();
            }
            else
            {
                address = cmdArgs[0];
                portString = cmdArgs[1];
            }
            int port;
            try
            {
                port = int.Parse(portString);
            }
            catch(FormatException)
            {
                ConsoleHelper.ErrorLine("Bad number format!");
                return;
            }
            try
            {
                ConsoleHelper.PrintLine("Connecting to {0} on port {1}...", address, port);
                Utils.OpenClientChannel();
                IServer _server = Utils.Connect(address, port);

                ConsoleHelper.PrintLine();

                if(!Utils.IsServerCompatible(_server))
                {
                    ConsoleHelper.ErrorLine("Server version {0}.{1} not compatible with client version {2}.{3}!",
                        _server.InterfaceVersionMajor, _server.InterfaceVersionMinor,
                        Utils.InterfaceVersionMajor, Utils.InterfaceVersionMinor);
                    return;
                }
                ConsoleHelper.PrintLine("Server name: {0}", _server.Name);
                ConsoleHelper.PrintLine("Server description: {0}", _server.Description);
                _server.RegisterListener(Instance);
                ConsoleHelper.SuccessLine("Connection estabilished!");

                ConsoleHelper.PrintLine();

                NestedCommand rootCmd = new NestedCommand();
                NestedCommand<IServer> serverCmd = new NestedCommand<IServer>(cmd => _server);
                serverCmd.MakeServerCommand();
                NestedCommand<IServer, ISession> sessionCmd = (NestedCommand<IServer, ISession>)serverCmd["session"];
                sessionCmd["join"] = new FinalCommand<ISession>((session, cmd) =>
                {
                    CreatePlayerData cpd;
                    string playerName;
                    Password playerPassword;
                    Password password;
                    if(Instance.sessionControl != null)
                    {
                        ConsoleHelper.ErrorLine("Already connected to a session!");
                        return;
                    }

                    ConsoleHelper.Print("Session Password: "******"Player Name: ");
                    playerName = ConsoleHelper.ReadLine();
                    ConsoleHelper.Print("Player Password: "******"Joined session!");
                    }
                    catch(GameException e)
                    {
                        ConsoleHelper.ErrorLine("Cannot join session: {0}", e.GetType());
                    }
                });
                sessionCmd["joinai"] = new FinalCommand<ISession>((session, cmd) =>
                {
                    CreatePlayerData cpd;
                    Password password;
                    if(Instance.sessionControl != null)
                    {
                        ConsoleHelper.ErrorLine("Already connected to a session!");
                        return;
                    }

                    ConsoleHelper.Print("Session Password: "******"TestAI";

                    try
                    {
                        Instance.SetAI(ai);
                        session.Join(password, cpd, Instance.mainSessionListener);
                        ConsoleHelper.SuccessLine("Joined session!");
                    }
                    catch(GameException e)
                    {
                        Instance.UnsetAI();
                        ConsoleHelper.ErrorLine("Cannot join session: {0}", e.GetType());
                    }
                });
                sessionCmd["replace"] = new FinalCommand<ISession>((session, cmd) =>
                {
                    CreatePlayerData cpd;
                    string playerName;
                    Password playerPassword;
                    Password password;
                    int id;
                    try
                    {
                        id = int.Parse(cmd.Dequeue());
                    }
                    catch(FormatException)
                    {
                        ConsoleHelper.ErrorLine("Bad number format!");
                        return;
                    }

                    if(Instance.sessionControl != null)
                    {
                        ConsoleHelper.ErrorLine("Already connected to a session!");
                        return;
                    }

                    ConsoleHelper.Print("Session Password: "******"Player Name: ");
                    playerName = ConsoleHelper.ReadLine();
                    ConsoleHelper.Print("Player Password: "******"Joined session!");
                    }
                    catch(GameException e)
                    {
                        ConsoleHelper.ErrorLine("Cannot join session: {0}", e.GetType());
                    }
                });
                sessionCmd["replaceai"] = new FinalCommand<ISession>((session, cmd) =>
                {
                    CreatePlayerData cpd;
                    Password playerPassword;
                    Password password;
                    int id;
                    try
                    {
                        id = int.Parse(cmd.Dequeue());
                    }
                    catch(FormatException)
                    {
                        ConsoleHelper.ErrorLine("Bad number format!");
                        return;
                    }

                    if(Instance.sessionControl != null)
                    {
                        ConsoleHelper.ErrorLine("Already connected to a session!");
                        return;
                    }

                    ConsoleHelper.Print("Session Password: "******"Player Password: "******"TestAI";
                    cpd.Password = playerPassword;

                    try
                    {
                        Instance.SetAI(ai);
                        session.Replace(id, password, cpd, Instance.mainSessionListener);
                        ConsoleHelper.SuccessLine("Joined session!");
                    }
                    catch(GameException e)
                    {
                        Instance.UnsetAI();
                        ConsoleHelper.ErrorLine("Cannot join session: {0}", e.GetType());
                    }
                });
                sessionCmd["aitestcontinue"] = new FinalCommand<ISession>((session, cmd) =>
                {
                    CreatePlayerData cpd;
                    Password password;
                    int id;
                    try
                    {
                        id = int.Parse(cmd.Dequeue());
                    }
                    catch(FormatException)
                    {
                        ConsoleHelper.ErrorLine("Bad number format!");
                        return;
                    }

                    if(Instance.sessionControl != null)
                    {
                        ConsoleHelper.ErrorLine("Already connected to a session!");
                        return;
                    }

                    password = new Password("_aitest");

                    AI.AIPlayer ai = new AI.AIPlayer();
                    cpd = ai.CreateData;
                    cpd.Name = "TestAI";
                    cpd.Password = new Password("_aitest");

                    try
                    {
                        Instance.SetAI(ai);
                        Instance.aiTest = true;
                        session.Replace(id, password, cpd, Instance.mainSessionListener);
                        if(Instance.sessionControl.Session.State != SessionState.Playing)
                            Instance.sessionControl.StartGame();
                        ConsoleHelper.SuccessLine("Joined AI Test session!");
                        Console.ReadKey(true);
                        Instance.sessionControl.Disconnect();
                        Instance.sessionControl = null;
                        Instance.gameControl = null;
                        ConsoleHelper.SuccessLine("AI test session disconnected!");
                    }
                    catch(GameException e)
                    {
                        ConsoleHelper.ErrorLine("Cannot join session: {0}", e.GetType());
                    }
                    Instance.UnsetAI();
                    Instance.aiTest = false;
                });
                serverCmd["session"] = sessionCmd;
                serverCmd["test"] = new FinalCommand<IServer>((server, cmd) =>
                {
                    if(Instance.sessionControl != null)
                    {
                        ConsoleHelper.ErrorLine("Already connected to a session!");
                        return;
                    }
                    int playerCount = 4;
                    if(cmd.Count != 0)
                    {
                        try
                        {
                            playerCount = int.Parse(cmd.Dequeue());
                        }
                        catch(FormatException)
                        {
                            ConsoleHelper.ErrorLine("Bad number format!");
                            return;
                        }
                    }

                    CreateSessionData csd = new CreateSessionData { Name = "Test", Description = "", MinPlayers = playerCount, MaxPlayers = playerCount, MaxSpectators = 0, DodgeCity = true };
                    CreatePlayerData cpd = new CreatePlayerData { Name = "Human" };
                    try
                    {
                        server.CreateSession(csd, cpd, Instance.mainSessionListener);
                        ConsoleHelper.SuccessLine("Test session created!");
                    }
                    catch(GameException e)
                    {
                        ConsoleHelper.ErrorLine("Cannot create session: {0}", e.GetType());
                    }
                });
                serverCmd["testai"] = new FinalCommand<IServer>((server, cmd) =>
                {
                    if(Instance.sessionControl != null)
                    {
                        ConsoleHelper.ErrorLine("Already connected to a session!");
                        return;
                    }
                    int playerCount = 4;
                    if(cmd.Count != 0)
                    {
                        try
                        {
                            playerCount = int.Parse(cmd.Dequeue());
                        }
                        catch(FormatException)
                        {
                            ConsoleHelper.ErrorLine("Bad number format!");
                            return;
                        }
                    }

                    CreateSessionData csd = new CreateSessionData { Name = "Test", Description = "", MaxPlayers = playerCount, MinPlayers = playerCount, MaxSpectators = 0, DodgeCity = true };
                    AI.AIPlayer ai = new AI.AIPlayer();
                    CreatePlayerData cpd = ai.CreateData;
                    cpd.Name = "TestAI";
                    try
                    {
                        server.CreateSession(csd, cpd, Instance.mainSessionListener);
                        Instance.SetAI(ai);
                        ConsoleHelper.SuccessLine("Test AI session created!");
                    }
                    catch(GameException e)
                    {
                        ConsoleHelper.ErrorLine("Cannot create session: {0}", e.GetType());
                    }
                });
                serverCmd["aitest"] = new FinalCommand<IServer>((server, cmd) =>
                {
                    if(Instance.sessionControl != null)
                    {
                        ConsoleHelper.ErrorLine("Already connected to a session!");
                        return;
                    }
                    int playerCount = 4;
                    if(cmd.Count != 0)
                    {
                        try
                        {
                            playerCount = int.Parse(cmd.Dequeue());
                        }
                        catch(FormatException)
                        {
                            ConsoleHelper.ErrorLine("Bad number format!");
                            return;
                        }
                    }

                    CreateSessionData csd = new CreateSessionData
                    {
                        Name = "AI Test",
                        Description = "An AI testing session.",
                        MaxPlayers = playerCount,
                        MinPlayers = playerCount,
                        MaxSpectators = 0,
                        PlayerPassword = new Password("_aitest"),
                        DodgeCity = true
                    };
                    AI.AIPlayer ai = new AI.AIPlayer();
                    CreatePlayerData cpd = ai.CreateData;
                    cpd.Name = "TestAI";
                    cpd.Password = new Password("_aitest");
                    try
                    {
                        server.CreateSession(csd, cpd, Instance.mainSessionListener);
                        Instance.SetAI(ai);
                        Instance.aiTest = true;
                        Instance.sessionControl.StartGame();
                        ConsoleHelper.SuccessLine("AI test session created!");
                        Console.ReadKey(true);
                        Instance.sessionControl.Disconnect();
                        Instance.sessionControl = null;
                        Instance.gameControl = null;
                        Instance.UnsetAI();
                        Instance.aiTest = false;
                        ConsoleHelper.SuccessLine("AI test session disconnected!");
                    }
                    catch(GameException e)
                    {
                        ConsoleHelper.ErrorLine("Cannot create session: {0}", e.GetType());
                    }
                });
                serverCmd["createsession"] = new FinalCommand<IServer>((server, cmd) =>
                {
                    if(Instance.sessionControl != null)
                    {
                        ConsoleHelper.ErrorLine("Already connected to a session!");
                        return;
                    }

                    ConsoleHelper.Print("Session Name: ");
                    string sessionName = ConsoleHelper.ReadLine();
                    ConsoleHelper.Print("Session Description: ");
                    string sessionDescription = ConsoleHelper.ReadLine();
                    int sessionMinPlayers;
                    int sessionMaxPlayers;
                    int sessionMaxSpectators;
                    try
                    {
                        ConsoleHelper.Print("Session MinPlayers: ");
                        sessionMinPlayers = int.Parse(ConsoleHelper.ReadLine());
                        ConsoleHelper.Print("Session MaxPlayers: ");
                        sessionMaxPlayers = int.Parse(ConsoleHelper.ReadLine());
                        ConsoleHelper.Print("Session MaxSpectators: ");
                        sessionMaxSpectators = int.Parse(ConsoleHelper.ReadLine());
                    }
                    catch(FormatException)
                    {
                        ConsoleHelper.ErrorLine("Bad number format!");
                        return;
                    }

                    ConsoleHelper.Print("Session PlayerPassword: "******"Session SpectatorPassword: "******"Session ShufflePlayers: ");
                    bool sessionShufflePlayers = ConsoleHelper.ReadLine().ToLower() == "y";
                    ConsoleHelper.Print("Session DodgeCity: ");
                    bool sessionDodgeCity = ConsoleHelper.ReadLine().ToLower() == "y";
                    ConsoleHelper.Print("Session HighNoon: ");
                    bool sessionHighNoon = ConsoleHelper.ReadLine().ToLower() == "y";
                    ConsoleHelper.Print("Session FistfulOfCards: ");
                    bool sessionFistfulOfCards = ConsoleHelper.ReadLine().ToLower() == "y";
                    ConsoleHelper.Print("Session WildWestShow: ");
                    bool sessionWildWestShow = ConsoleHelper.ReadLine().ToLower() == "y";
                    CreateSessionData csd = new CreateSessionData { Name = sessionName, Description = sessionDescription, MinPlayers = sessionMinPlayers, MaxPlayers = sessionMaxPlayers, MaxSpectators = sessionMaxSpectators, PlayerPassword = sessionPlayerPassword, SpectatorPassword = sessionSpectatorPassword, ShufflePlayers = sessionShufflePlayers, DodgeCity = sessionDodgeCity, HighNoon = sessionHighNoon,
                    FistfulOfCards = sessionFistfulOfCards, WildWestShow = sessionWildWestShow };

                    ConsoleHelper.Print("Player Name: ");
                    string playerName = ConsoleHelper.ReadLine();
                    ConsoleHelper.Print("Player Password: "******"Session created!");
                    }
                    catch(GameException e)
                    {
                        ConsoleHelper.ErrorLine("Cannot create session: {0}", e.GetType());
                    }
                });
                rootCmd["server"] = serverCmd;
                NestedCommand<IPlayerSessionControl> sessionControlCommand = new NestedCommand<IPlayerSessionControl>(cmd =>
                {
                    IPlayerSessionControl sessionControl = Instance.sessionControl;
                    if(sessionControl == null)
                    {
                        ConsoleHelper.ErrorLine("Not connected to any session!");
                        return null;
                    }
                    return sessionControl;
                });
                sessionControlCommand.MakePlayerSessionControlCommand(() =>
                {
                    Instance.sessionControl = null;
                    Instance.gameControl = null;
                });
                rootCmd["sessioncontrol"] = sessionControlCommand;
                NestedCommand<IPlayerControl> gameControlCommand = new NestedCommand<IPlayerControl>(cmd =>
                {
                    IPlayerControl gameControl = Instance.gameControl;
                    if(gameControl == null)
                    {
                        ConsoleHelper.ErrorLine("Not playing any game!");
                        return null;
                    }
                    return gameControl;
                });
                gameControlCommand.MakePlayerGameControlCommand();
                rootCmd["gamecontrol"] = gameControlCommand;
                rootCmd["exit"] = new FinalCommand(cmd =>
                {
                    _server.UnregisterListener(Instance);
                    Environment.Exit(0);
                });
                while(true) // command-line loop
                {
                    try
                    {
                        rootCmd.ReadAndExecute();
                    }
                    catch(InvalidOperationException)
                    {
                        ConsoleHelper.ErrorLine("Invalid command!");
                    }
                }
            }
            catch(RemotingException e)
            {
                ConsoleHelper.ErrorLine("Remoting error!");
            #if DEBUG
                ConsoleHelper.DebugLine(e.ToString());
            #endif
                return;
            }
            catch(SerializationException e)
            {
                ConsoleHelper.ErrorLine("Serialization error!");
            #if DEBUG
                ConsoleHelper.DebugLine(e.ToString());
            #endif
                return;
            }
        }
Esempio n. 24
0
        public void CreateSession(CreateSessionData sessionData, CreatePlayerData playerData, IPlayerSessionEventListener listener)
        {
            lock(Lock)
            {
                int id = sessions.GenerateID();
                Session session = new Session(this, id, sessionData);
                sessions.Add(id, session);
                Console.Error.WriteLine("INFO: Created session #{0}.", id);

                session.Join(sessionData.PlayerPassword, playerData, listener);
                eventMgr.OnSessionCreated(session);
                SaveState();
            }
        }