コード例 #1
0
        public bool HandleMessage(INetMessage message)
        {
            Console.WriteLine($"SetUnitPositionHandler. PeerId: {message.Client.NetPeer.Id}");

            if (message.Client.CurrentSessionId == null)
            {
                return(true);
            }

            var session = SessionCache.Instance.GetSessionById(message.Client.CurrentSessionId);

            if (session == null || session.IsStarted)
            {
                return(true);
            }

            int          unitId       = message.Reader.GetInt();
            PositionData positionData = MessageSerializerService.DeserializeObjectOfType <PositionData>(message.Reader.GetString());

            if (session.Units.ContainsKey(unitId))
            {
                session.Units[unitId].UnitData.PositionData = positionData;
            }

            return(true);
        }
コード例 #2
0
    protected override void OnHandleMessage(NetDataReader reader)
    {
        int unitCount = reader.GetInt();

        for (int i = 0; i < unitCount; i++)
        {
            UnitData unitData = MessageSerializerService.DeserializeObjectOfType <UnitData>(reader.GetString());

            UnitController newUnit = ((GameObject)Instantiate(Resources.Load("Objects/Player"),
                                                              new Vector3(unitData.PositionData.X, unitData.PositionData.Y, unitData.PositionData.Z),
                                                              Quaternion.identity)).GetComponent <UnitController>();

            NetObject netObject = newUnit.gameObject.GetComponent <NetObject>();
            netObject.Id = unitData.UnitId;

            newUnit.Health       = unitData.Health;
            newUnit.MoveSpeed    = unitData.MoveSpeed;
            newUnit.MinDamage    = unitData.MinDamage;
            newUnit.MaxDamage    = unitData.MaxDamage;
            newUnit.AttackRadius = unitData.AttackRadius;

            ClientNetEventListener.Instance.NetObjects.Add(unitData.UnitId, netObject);
            BattleManager.Instance.EnemyUnits.Add(i, newUnit);
        }

        BattleManager.Instance.StartSession();
    }
コード例 #3
0
        public bool HandleMessage(INetMessage message)
        {
            int unitId = message.Reader.GetInt();

            var          serializePositionData = message.Reader.GetString();
            PositionData positionData          =
                MessageSerializerService.DeserializeObjectOfType <PositionData>(serializePositionData);

            var session = SessionCache.Instance.GetSessionById(message.Client.CurrentSessionId);

            if (session == null || !session.IsStarted)
            {
                return(true);
            }

            if (session.Units.ContainsKey(unitId))
            {
                NetDataWriter _dataWriter = new NetDataWriter();
                _dataWriter.Reset();
                _dataWriter.Put((byte)NetOperationCode.SendUnit);
                _dataWriter.Put(unitId);
                _dataWriter.Put(serializePositionData);

                foreach (var p in session.Players)
                {
                    session.SendToAll(_dataWriter, DeliveryMethod.Sequenced);
                }
            }

            return(true);
        }
コード例 #4
0
    protected override void OnHandleMessage(Dictionary <byte, object> parameters, string debugMessage, int returnCode)
    {
        var selectedCharacter =
            MessageSerializerService.DeserializeObjectOfType <GameCommon.SerializedObjects.Character>(
                parameters[(byte)MessageParameterCode.Object]);

        if (selectedCharacter != null)
        {
            GameData.Instance.selectedCharacter = selectedCharacter;

            var characterName = selectedCharacter.Name;
            var posX          = selectedCharacter.Loc_X;
            var posZ          = selectedCharacter.Loc_Z;
            var posY          = Terrain.activeTerrain.terrainData.GetHeight((int)posX, (int)posZ);

            Vector3 characterPosition = new Vector3(posX, posY, posZ);
            characterPosition.y = Terrain.activeTerrain.SampleHeight(characterPosition);

            var characterPrefab = Resources.Load("Hammer Warrior") as GameObject;
            var obj             = Instantiate(characterPrefab, characterPosition, Quaternion.identity);
            if (obj != null)
            {
                var player = obj.AddComponent <Player>();
                player.CharacterName = characterName;

                GameData.Instance.players.Add(player);
            }

            Debug.Log("WorldEnterHandler charName:" + characterName);
        }
    }
コード例 #5
0
        public bool HandleMessage(INetMessage message)
        {
            Console.WriteLine($"JoinSessionHandler. PeerId: {message.Client.NetPeer.Id}");

            byte[] sessionId = new byte[12];
            message.Reader.GetBytes(sessionId, 12);

            NetDataWriter writer = new NetDataWriter();

            writer.Put((byte)NetOperationCode.JoinSession);

            if (message.Client.CurrentSessionId != null || !SessionCache.Instance.JoinSession(sessionId, message.Client))
            {
                writer.Put((byte)NetErrorCode.SessionConnectedFailed);
            }
            else
            {
                writer.Put((byte)NetErrorCode.Success);

                writer.Put(message.Client.Units.Count);
                foreach (var u in message.Client.Units)
                {
                    writer.Put(MessageSerializerService.SerializeObjectOfType(u.Value.UnitData));
                }
            }

            message.Client.NetPeer.Send(writer, DeliveryMethod.ReliableOrdered);
            return(true);
        }
コード例 #6
0
    /// <summary>
    /// Handle message.
    /// </summary>
    /// <param name="reader">Reader of parameters</param>
    protected override void OnHandleMessage(NetDataReader reader)
    {
        var          id           = reader.GetInt();
        PositionData positionData = MessageSerializerService.DeserializeObjectOfType <PositionData>(reader.GetString());

        Vector3 newPosition = new Vector3(positionData.X, positionData.Y, positionData.Z);

        ClientNetEventListener.Instance.OnMoveEvent(id, newPosition);
    }
コード例 #7
0
    public void SendRegisterRequest()
    {
        if (Login.text.Length < 6 || Password.text.Length < 6)
        {
            Info.text = "Login and password can't be less than 6 symbols";
            return;
        }
        else if (Login.text.Length > 16 || Password.text.Length > 16)
        {
            Info.text = "Login and password can't be more than 16 symbols";
            return;
        }

        if (Password.text != ConfirmPassword.text)
        {
            Info.text = "Passwords don't match";
            return;
        }

        if (CharacterName.text.Length < 6)
        {
            Info.text = "Name of your character can't be less than 6 symbols.";
            return;
        }
        else if (CharacterName.text.Length > 16)
        {
            Info.text = "Name of your character can't be more than 16 symbols";
            return;
        }

        var serializeCharacterData = MessageSerializerService
                                     .SerializeObjectOfType <RegisterCharacterData>(new RegisterCharacterData
        {
            CharacterName = CharacterName.text,
            Sex           = Sex,
            CharacterType = CharacterType,
            Class         = Class,
            SubClass      = SubClass
        });

        OperationRequest request = new OperationRequest()
        {
            OperationCode = (byte)MessageOperationCode.LoginOperationCode,
            Parameters    = new Dictionary <byte, object>
            {
                { PhotonEngine.Instance.SubCodeParameterCode, (int)MessageSubCode.RegisterSubCode },
                { (byte)MessageParameterCode.Login, Login.text },
                { (byte)MessageParameterCode.Password, Password.text },
                { (byte)MessageParameterCode.Email, Email.text },
                { (byte)MessageParameterCode.CharacterRegisterData, serializeCharacterData.ToString() }
            }
        };

        PhotonEngine.Instance.SendRequest(request);
    }
コード例 #8
0
    public void SetPosition(int unitId, Vector3 newPosition)
    {
        PositionData positionData = new PositionData(newPosition.x, newPosition.y, newPosition.z);

        NetDataWriter writer = new NetDataWriter();

        writer.Put((byte)NetOperationCode.SetUnitPosition);
        writer.Put(unitId);
        writer.Put(MessageSerializerService.SerializeObjectOfType(positionData));

        ClientNetEventListener.Instance.SendOperation(writer, DeliveryMethod.ReliableOrdered);
    }
コード例 #9
0
    public void SendNewDestination(Vector3 newDestination)
    {
        PositionData positionData = new PositionData(newDestination.x, newDestination.y, newDestination.z);

        NetDataWriter dataWriter = new NetDataWriter();

        dataWriter.Reset();
        dataWriter.Put((byte)NetOperationCode.SendUnit);
        dataWriter.Put(Id);
        dataWriter.Put(MessageSerializerService.SerializeObjectOfType(positionData));

        ClientNetEventListener.Instance.SendOperation(dataWriter, DeliveryMethod.Sequenced);
    }
コード例 #10
0
        protected override void OnHandleMessage(Dictionary <byte, object> parameters, string debugMessage,
                                                int returnCode)
        {
            if (returnCode == (short)ReturnCode.Ok)
            {
                var region =
                    MessageSerializerService.DeserializeObjectOfType <GameCommon.SerializedObjects.Region>(
                        parameters[(byte)MessageParameterCode.Object]);

                GameData.Instance.region           = region;
                LoadingScene.imageComp.fillAmount += 0.25f;

                Debug.LogFormat("Region of character is selected successfully. Your region is {0}", region.Name);
            }
        }
コード例 #11
0
        protected override void OnHandleMessage(Dictionary <byte, object> parameters, string debugMessage, int returnCode)
        {
            if (returnCode == (short)ReturnCode.Ok)
            {
                var listChar =
                    MessageSerializerService.DeserializeObjectOfType <IEnumerable <GameCommon.SerializedObjects.Character> >(parameters[(byte)MessageParameterCode.Object]);

                var characters = listChar.ToList();
                GameData.Instance.characters = characters.ToList();
                controller.LoadCharacterListInScene(characters.ToList());
            }
            else
            {
                Debug.LogFormat("{0}", debugMessage);
            }
        }
コード例 #12
0
        private void OnOperationRequest(object sender, MessageReceivedEventArgs e)
        {
            Console.WriteLine("Handling operation request");

            using (var message = e.GetMessage()) {
                using (var reader = message.GetReader()) {
                    var parameters =
                        MessageSerializerService.DeserializeObjectOfType <Dictionary <byte, object> >(reader.ReadString());
                    handlerList.HandleMessage(
                        new Request((byte)e.Tag,
                                    parameters.ContainsKey(Server.SubCodeParameterCode)
                                ? (int?)Convert.ToInt32(parameters[Server.SubCodeParameterCode])
                                : null, parameters), this);
                }
            }
        }
        protected override void OnHandleMessage(Dictionary <byte, object> parameters, string debugMessage, int returnCode)
        {
            if (returnCode == (short)ReturnCode.Ok)
            {
                var selectedCharacter =
                    MessageSerializerService.DeserializeObjectOfType <GameCommon.SerializedObjects.Character>(
                        parameters[(byte)MessageParameterCode.Object]);

                Debug.LogFormat("Character selected successfully. Your character is {0}", selectedCharacter.Name);
                GameData.Instance.selectedCharacter = selectedCharacter;
                SceneManager.LoadScene(3); // go back to select character scene
            }
            else
            {
                Debug.LogFormat("{0}", debugMessage);
            }
        }
コード例 #14
0
    private IEnumerator SendMyPosition()
    {
        yield return(new WaitForSeconds(0.1f));

        PositionData positionData = new PositionData(transform.position.x, transform.position.y, transform.position.z);

        NetDataWriter dataWriter = new NetDataWriter();

        dataWriter.Reset();
        dataWriter.Put((byte)NetOperationCode.MoveUnit);
        dataWriter.Put(Id);
        dataWriter.Put(MessageSerializerService.SerializeObjectOfType(positionData));

        ClientNetEventListener.Instance.SendOperation(dataWriter, DeliveryMethod.Sequenced);

        StartCoroutine("SendMyPosition");
    }
コード例 #15
0
        protected void OnOperationRequest(object sender, MessageReceivedEventArgs e)
        {
            var peer = ConnectionCollection.GetPeers <IClientPeer>().FirstOrDefault(c => c.Client == e.Client);

            subServerHandlerList.Peer = peer;

            Console.WriteLine("Handling operation request");

            using (var message = e.GetMessage()) {
                using (var reader = message.GetReader()) {
                    var parameters =
                        MessageSerializerService.DeserializeObjectOfType <Dictionary <byte, object> >(reader.ReadString());
                    subServerHandlerList.HandleMessage(new Request((byte)e.Tag,
                                                                   parameters.ContainsKey(SubCodeParameterCode)
                            ? (int?)Convert.ToInt32(parameters[SubCodeParameterCode])
                            : null, parameters), this);
                }
            }
        }
コード例 #16
0
        public bool HandleMessage(IMessage message, IServerPeer peer)
        {
            // How to prevent hacking? - Proxy server removed all "special" codes from the client, and uses its own when forwarding data
            var charList = new CharacterMapper().LoadByUserId((int)message.Parameters[(byte)MessageParameterCode.UserId])
                           .Select(characterDO => new Character {
                CharacterId = characterDO.Id,
                Name        = characterDO.Name
            });
            // We have a list of characters, Added into a Serializable object
            var returnResponse = new Response(Code, SubCode, new Dictionary <byte, object>()
            {
                { (byte)MessageParameterCode.PeerId, message.Parameters[(byte)MessageParameterCode.PeerId] },
                { (byte)MessageParameterCode.Object, MessageSerializerService.SerializeObjectOfType(charList) },
                { (byte)MessageParameterCode.SubCodeParameterCode, SubCode }
            });

            peer.SendMessage(returnResponse);
            return(true);
        }
コード例 #17
0
        public bool HandleMessage(INetMessage message)
        {
            int unitId = message.Reader.GetInt();

            var          serializePositionData = message.Reader.GetString();
            PositionData positionData          =
                MessageSerializerService.DeserializeObjectOfType <PositionData>(serializePositionData);

            var session = SessionCache.Instance.GetSessionById(message.Client.CurrentSessionId);

            if (session == null || !session.IsStarted)
            {
                return(true);
            }

            if (session.Units.ContainsKey(unitId))
            {
                session.Units[unitId].UnitData.PositionData = positionData;
            }

            return(true);
        }
コード例 #18
0
        public void SendMessage(IMessage message)
        {
            if (!message.Parameters.Keys.Contains(Server.SubCodeParameterCode))
            {
                message.Parameters.Add(Server.SubCodeParameterCode, message.SubCode);
            }

            switch (message)
            {
            case Event _:
                using (var writer = DarkRiftWriter.Create()) {
                    var parameters = new Dictionary <byte, object>()
                    {
                        { (byte)MessageParameterCode.SubCodeParameterCode, message.SubCode }
                    };
                    var serializedParams = MessageSerializerService.SerializeObjectOfType(parameters);
                    writer.Write((string)serializedParams);
                    using (var msg = Message.Create(message.Code, writer)) {
                        Client.SendMessage(msg, SendMode.Reliable);
                    }
                }

                break;

            case Response response:
                using (var writer = DarkRiftWriter.Create()) {
                    var serializedParams = MessageSerializerService.SerializeObjectOfType(response.Parameters);
                    writer.Write((string)serializedParams);
                    writer.Write(response.DebugMessage);
                    writer.Write(response.ReturnCode);
                    using (var msg = Message.Create(message.Code, writer)) {
                        Client.SendMessage(msg, SendMode.Reliable);
                    }
                }

                break;
            }
        }
コード例 #19
0
        public void StartSession(object src, ElapsedEventArgs args)
        {
            if (IsStarted)
            {
                return;
            }

            if (Players.Count != 2)
            {
                SessionCache.Instance.DeleteSession(Id);
                return;
            }

            NetDataWriter writer = new NetDataWriter();

            writer.Put((byte)NetOperationCode.StartSession);

            writer.Put(Players.ElementAt(1).Value.Units.Count);
            foreach (var u in Players.ElementAt(1).Value.Units)
            {
                writer.Put(MessageSerializerService.SerializeObjectOfType(u.Value.UnitData));
            }

            Players.ElementAt(0).Value.NetPeer.Send(writer, DeliveryMethod.ReliableOrdered);

            writer.Reset();
            writer.Put((byte)NetOperationCode.StartSession);

            writer.Put(Players.ElementAt(0).Value.Units.Count);
            foreach (var u in Players.ElementAt(0).Value.Units)
            {
                writer.Put(MessageSerializerService.SerializeObjectOfType(u.Value.UnitData));
            }

            Players.ElementAt(1).Value.NetPeer.Send(writer, DeliveryMethod.ReliableOrdered);

            IsStarted = true;
        }
コード例 #20
0
    /// <summary>
    /// Handle message.
    /// </summary>
    /// <param name="reader">Reader of parameters</param>
    protected override void OnHandleMessage(NetDataReader reader)
    {
        NetErrorCode errorCode = (NetErrorCode)reader.GetByte();

        if (errorCode == NetErrorCode.SessionConnectedFailed)
        {
            Debug.Log("Session connected failed");
            return;
        }

        int unitCount = reader.GetInt();

        for (int i = 0; i < unitCount; i++)
        {
            UnitData unitData = MessageSerializerService.DeserializeObjectOfType <UnitData>(reader.GetString());

            UnitController newUnit = ((GameObject)Instantiate(Resources.Load("Objects/Player"),
                                                              new Vector3(unitData.PositionData.X, unitData.PositionData.Y, unitData.PositionData.Z),
                                                              Quaternion.identity)).GetComponent <UnitController>();

            NetObject netObject = newUnit.gameObject.GetComponent <NetObject>();
            netObject.Id     = unitData.UnitId;
            netObject.IsMine = true;

            newUnit.Health       = unitData.Health;
            newUnit.MoveSpeed    = unitData.MoveSpeed;
            newUnit.MinDamage    = unitData.MinDamage;
            newUnit.MaxDamage    = unitData.MaxDamage;
            newUnit.AttackRadius = unitData.AttackRadius;

            ClientNetEventListener.Instance.NetObjects.Add(unitData.UnitId, netObject);
            BattleManager.Instance.PlayerUnits.Add(i, newUnit);
        }

        BattleManager.Instance.JoinSessionSuccess();
    }
コード例 #21
0
        public bool HandleMessage(IMessage message, IServerPeer peer)
        {
            var serverPeer = peer as PhotonServerPeer;
            var operation  = new RegisterOperation(serverPeer.protocol, message);

            if (!operation.IsValid)
            {
                peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>()
                {
                    { (byte)MessageParameterCode.SubCodeParameterCode, SubCode },
                    { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] },
                }, operation.GetErrorMessage(), (int)ReturnCode.OperationInvalid));

                return(true);
            }

            if (operation.Login.Length < 6 || operation.Password.Length < 6)
            {
                peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>()
                {
                    { (byte)MessageParameterCode.SubCodeParameterCode, SubCode },
                    { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] },
                }, "Login and password can't be less than 6 symbols.", (int)ReturnCode.OperationInvalid));

                return(true);
            }
            else if (operation.Login.Length > 16 || operation.Password.Length > 16)
            {
                peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>()
                {
                    { (byte)MessageParameterCode.SubCodeParameterCode, SubCode },
                    { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] },
                }, "Login and password can't be more than 16 symbols.", (int)ReturnCode.OperationInvalid));

                return(true);
            }

            var checkMail = new EmailAddressAttribute();

            if (!checkMail.IsValid(operation.Email))
            {
                peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>()
                {
                    { (byte)MessageParameterCode.SubCodeParameterCode, SubCode },
                    { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] },
                }, "Email address incorrect.", (int)ReturnCode.OperationInvalid));

                return(true);
            }

            var characterData = MessageSerializerService.DeserializeObjectOfType <RegisterCharacterData>(
                operation.CharacterRegisterData);

            characterData.CharacterType = 1;             // delete this if we add more types

            if (characterData.CharacterName.Length < 6)
            {
                peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>()
                {
                    { (byte)MessageParameterCode.SubCodeParameterCode, SubCode },
                    { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] },
                }, "Name of your character can't be less than 6 symbols.", (int)ReturnCode.OperationInvalid));

                return(true);
            }
            else if (characterData.CharacterName.Length > 16)
            {
                peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>()
                {
                    { (byte)MessageParameterCode.SubCodeParameterCode, SubCode },
                    { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] },
                }, "Name of your can't be more than 16 symbols.", (int)ReturnCode.OperationInvalid));

                return(true);
            }
            else if (characterData.Sex != "Male" && characterData.Sex != "Female")
            {
                return(true);
            }
            else if (characterData.CharacterType != 1)             // add more types
            {
                return(true);
            }
            else if (characterData.Class != "Warrior" && characterData.Class != "Rogue" && characterData.Class != "Mage")
            {
                return(true);
            }
            else if (characterData.SubClass != "Warlock" && characterData.SubClass != "Cleric")
            {
                return(true);
            }

            try
            {
                using (var session = NHibernateHelper.OpenSession())
                {
                    using (var transaction = session.BeginTransaction())
                    {
                        var accounts        = session.QueryOver <AccountModel>().Where(a => a.Login == operation.Login).List();
                        var accountsByEmail = session.QueryOver <AccountModel>().Where(a => a.Email == operation.Email).List();
                        var characters      = session.QueryOver <CharacterModel>().Where(c => c.Name == characterData.CharacterName).List();

                        if (accounts.Count > 0)
                        {
                            transaction.Commit();

                            peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>()
                            {
                                { (byte)MessageParameterCode.SubCodeParameterCode, SubCode },
                                { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] },
                            }, "Login already taken.", (int)ReturnCode.AlreadyExist));

                            return(true);
                        }
                        else if (accountsByEmail.Count > 0)
                        {
                            transaction.Commit();

                            peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>()
                            {
                                { (byte)MessageParameterCode.SubCodeParameterCode, SubCode },
                                { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] },
                            }, "Email already taken.", (int)ReturnCode.AlreadyExist));

                            return(true);
                        }
                        else if (characters.Count > 0)
                        {
                            transaction.Commit();

                            peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>()
                            {
                                { (byte)MessageParameterCode.SubCodeParameterCode, SubCode },
                                { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] },
                            }, "Name already taken.", (int)ReturnCode.AlreadyExist));

                            return(true);
                        }

                        string salt = Guid.NewGuid().ToString().Replace("-", "");

                        AccountModel newAccount = new AccountModel()
                        {
                            Login    = operation.Login,
                            Password = BitConverter.ToString(SHA512.Create().ComputeHash(
                                                                 Encoding.UTF8.GetBytes(salt + operation.Password))).Replace("-", ""),
                            Salt  = salt,
                            Email = operation.Email,

                            AdminLevel = 0,
                            BanLevel   = 0,

                            Created = DateTime.Now,
                            Updated = DateTime.Now
                        };

                        session.Save(newAccount);
                        transaction.Commit();

                        Log.DebugFormat("Create new Account. Login - {0}.", operation.Login);
                    }

                    using (var transaction = session.BeginTransaction())
                    {
                        var accounts = session.QueryOver <AccountModel>().Where(a => a.Login == operation.Login).SingleOrDefault();

                        CharacterModel newCharacter = new CharacterModel()
                        {
                            AccountId = accounts,

                            Name          = characterData.CharacterName,
                            Sex           = characterData.Sex,
                            CharacterType = characterData.CharacterType,
                            Class         = characterData.Class,
                            SubClass      = characterData.SubClass,

                            Level     = 1,
                            Exp       = 0,
                            Strength  = 1,
                            Intellect = 1,

                            RangLevel = 0,

                            Gold       = 10000,
                            Donate     = 0,
                            SkillPoint = 1000,
                            StatPoint  = 0,

                            InventorySize = 32,

                            GuildId = 0,

                            Created = DateTime.Now,
                            Updated = DateTime.Now
                        };

                        session.Save(newCharacter);
                        transaction.Commit();

                        Log.DebugFormat("Create new Character. Name - {0}.", characterData.CharacterName);
                    }

                    peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>()
                    {
                        { (byte)MessageParameterCode.SubCodeParameterCode, SubCode },
                        { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] },
                    }, "Register success.", (int)ReturnCode.OK));
                }

                return(true);
            }
            catch (Exception ex)
            {
                Log.ErrorFormat("Error register handler: {0}", ex);

                peer.SendMessage(new Response(Code, SubCode, new Dictionary <byte, object>()
                {
                    { (byte)MessageParameterCode.SubCodeParameterCode, SubCode },
                    { (byte)MessageParameterCode.PeerIdParameterCode, message.Parameters[(byte)MessageParameterCode.PeerIdParameterCode] },
                }, ex.ToString(), (int)ReturnCode.OperationDenied));

                return(true);
            }
        }