Ejemplo n.º 1
0
        public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            // get parameter
            var      serial = (string)operationRequest.Parameters[(byte)ParameterCode.Serial];
            Actor    actor  = ServerApp.instance.actorManager.GetActorFromGuid(peer.peerGuid);
            CellRoom room   = ServerApp.instance.cellManager.TryGetRoomBySerial(serial);
            // create response.
            OperationResponse response = new OperationResponse(operationRequest.OperationCode);

            if (room == null)
            {
                response.ReturnCode   = (short)ResultCode.Failed;
                response.DebugMessage = "The room was not exist.";
            }
            else
            {
                // try to join room.
                if (room.Join(actor.memberID))
                {
                    response.ReturnCode   = (short)ResultCode.Success;
                    response.DebugMessage = "JoinRoom Success";
                    ServerApp.Logger.InfoFormat("Actor {0} JoinRoom serial: {1}", actor.memberID, serial);

                    peer.SendOperationResponse(response, sendParameters);
                }
                else
                {
                    response.ReturnCode   = (short)ResultCode.Failed;
                    response.DebugMessage = "The room is full.";
                    peer.SendOperationResponse(response, sendParameters);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 类型:方法
        /// 名称:TryRegist
        /// 作者:taixihuase
        /// 作用:通过请求的角色数据,尝试创建、记录一个新的角色数据并再次返回给客户端
        /// 编写日期:2015/7/14
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        /// <param name="peer"></param>
        private static void TryRegist(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            ServerPeer.Log.Debug("Regist a new account...");

            RegistInfo info = (RegistInfo)
                              Serialization.Deserialize(operationRequest.Parameters[(byte)ParameterCode.Regist]);

            UserCollection.UserReturn userReturn = peer.Server.Users.RegistUser(info);

            if (userReturn.ReturnCode == UserCollection.UserReturn.ReturnCodeType.Success)
            {
                OperationResponse response = new OperationResponse((byte)OperationCode.Regist)
                {
                    ReturnCode   = (short)ErrorCode.Ok,
                    DebugMessage = "账号创建成功!"
                };

                peer.SendOperationResponse(response, sendParameters);
            }
            else
            {
                OperationResponse response = new OperationResponse((byte)OperationCode.Regist)
                {
                    ReturnCode   = (short)ErrorCode.InvalidOperation,
                    DebugMessage = userReturn.DebugMessage.ToString()
                };
                peer.SendOperationResponse(response, sendParameters);
                ServerPeer.Log.Debug(DateTime.Now + " : Failed to regist " + info.Account + " Because of " +
                                     Enum.GetName(typeof(UserCollection.UserReturn.ReturnCodeType),
                                                  userReturn.ReturnCode));
            }
        }
Ejemplo n.º 3
0
        public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            ActorRetune actorRet = ServerApp.instance.actorManager.GuestOnline(peer.peerGuid);

            OperationResponse response = new OperationResponse(operationRequest.OperationCode);

            response.ReturnCode = -1;
            // Success
            if (actorRet.ReturnCode == 0)
            {
                response.ReturnCode   = (short)ResultCode.Success;
                response.DebugMessage = "Login Success.";
                var parameter = new Dictionary <byte, object>()
                {
                    { (byte)ParameterCode.Username, actorRet.actorData.memberID }
                };

                response.Parameters = parameter;

                ServerApp.instance.actorManager.AddConenectPeer(peer.peerGuid, peer);
            }

            // RepeatLogin
            if (actorRet.ReturnCode == 2)
            {
                response.ReturnCode   = (short)ResultCode.CustomError;
                response.DebugMessage = "Your device repeat login.";
            }



            peer.SendOperationResponse(response, sendParameters);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 类型:方法
        /// 名称:TryEnter
        /// 作者:taixihuase
        /// 作用:通过角色数据尝试进入场景
        /// 编写日期:2015/7/22
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        /// <param name="peer"></param>
        private static void TryEnter(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            ServerPeer.Log.Debug("Entering");

            int uniqueId = (int)
                           Serialization.Deserialize(operationRequest.Parameters[(byte)ParameterCode.WorldEnter]);

            Character character;

            if (peer.Server.Characters.CharacterEnter(uniqueId, out character))
            {
                peer.Server.Data.CharacterData.GetCharacterPosition(character);
            }

            // 返回数据给客户端

            byte[] pos = Serialization.Serialize(character.Position);

            OperationResponse reponseData = new OperationResponse((byte)OperationCode.WorldEnter,
                                                                  new Dictionary <byte, object>
            {
                { (byte)ParameterCode.WorldEnter, pos }
            })
            {
                ReturnCode   = (short)ErrorCode.Ok,
                DebugMessage = "进入场景成功"
            };

            peer.SendOperationResponse(reponseData, sendParameters);

            byte[]    data      = Serialization.Serialize(character);
            EventData eventData = new EventData((byte)EventCode.WorldEnter, new Dictionary <byte, object>
            {
                { (byte)ParameterCode.WorldEnter, data }
            });

            eventData.SendTo(peer.Server.Characters.GamingClientsToBroadcast, sendParameters);
        }
Ejemplo n.º 5
0
        public override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            // Create response.
            OperationResponse response = new OperationResponse(operationRequest.OperationCode);

            // Try to create room.
            Actors.Actor actor = ServerApp.instance.actorManager.GetActorFromGuid(peer.peerGuid);
            CellRoom     room  = ServerApp.instance.cellManager.CreateRoom(actor.memberID);

            if (room == null)
            {
                response.ReturnCode   = (short)ResultCode.Failed;
                response.DebugMessage = "CreateRoom failed.";
            }
            else
            {
                ServerApp.Logger.InfoFormat("Acotr {0} create room index: {1}", actor.memberID, room.SerialNum);

                response.ReturnCode   = (short)ResultCode.Success;
                response.DebugMessage = "CreateRoom Success.";
            }

            peer.SendOperationResponse(response, sendParameters);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 类型:方法
        /// 名称:TryCreate
        /// 作者:taixihuase
        /// 作用:通过请求的角色数据,尝试创建、记录一个新的角色数据并再次返回给客户端
        /// 编写日期:2015/7/14
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        /// <param name="peer"></param>
        private static void TryCreate(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            ServerPeer.Log.Debug("Create a new character...");

            Character character = (Character)
                                  Serialization.Deserialize(operationRequest.Parameters[(byte)ParameterCode.CreateCharacter]);

            peer.Server.Data.CharacterData.CreateNewCharacter(character);
            peer.Server.Characters.CharacterLoad(character);

            byte[] data = Serialization.Serialize(character);

            var parameter = new Dictionary <byte, object>
            {
                { (byte)ParameterCode.CreateCharacter, data }
            };
            OperationResponse response = new OperationResponse((byte)OperationCode.CreateCharacter, parameter)
            {
                ReturnCode   = (short)ErrorCode.Ok,
                DebugMessage = "创建角色成功!"
            };

            peer.SendOperationResponse(response, sendParameters);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 类型:方法
        /// 名称:TryRegist
        /// 作者:taixihuase
        /// 作用:通过请求的角色数据,尝试创建、记录一个新的角色数据并再次返回给客户端
        /// 编写日期:2015/7/14
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        /// <param name="peer"></param>
        private static void TryRegist(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            ServerPeer.Log.Debug("Regist a new account...");

            RegistInfo info = (RegistInfo)
                Serialization.Deserialize(operationRequest.Parameters[(byte) ParameterCode.Regist]);

            UserCollection.UserReturn userReturn = peer.Server.Users.RegistUser(info);

            if (userReturn.ReturnCode == UserCollection.UserReturn.ReturnCodeType.Success)
            {
                OperationResponse response = new OperationResponse((byte)OperationCode.Regist)
                {
                    ReturnCode = (short)ErrorCode.Ok,
                    DebugMessage = "账号创建成功!"
                };

                peer.SendOperationResponse(response, sendParameters);
            }
            else
            {
                OperationResponse response = new OperationResponse((byte)OperationCode.Regist)
                {
                    ReturnCode = (short)ErrorCode.InvalidOperation,
                    DebugMessage = userReturn.DebugMessage.ToString()
                };
                peer.SendOperationResponse(response, sendParameters);
                ServerPeer.Log.Debug(DateTime.Now + " : Failed to regist " + info.Account + " Because of " +
                                     Enum.GetName(typeof(UserCollection.UserReturn.ReturnCodeType),
                                         userReturn.ReturnCode));
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 类型:方法
        /// 名称:TryLogin
        /// 作者:taixihuase
        /// 作用:通过登录数据尝试登录
        /// 编写日期:2015/7/14
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        /// <param name="peer"></param>
        private static void TryLogin(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            ServerPeer.Log.Debug("Logining...");

            LoginInfo login = (LoginInfo)
                Serialization.Deserialize(operationRequest.Parameters[(byte) ParameterCode.Login]);

            #region 对账号密码进行判断

            ServerPeer.Log.Debug(DateTime.Now + " : Loginning...");
            ServerPeer.Log.Debug(login.Account);
            ServerPeer.Log.Debug(login.Password);

            // 获取用户资料
            UserInfo user = new UserInfo(peer.PeerGuid, login.Account);
            UserCollection.UserReturn userReturn = peer.Server.Users.UserOnline(user, login.Password);

            // 若成功取得用户资料
            if (userReturn.ReturnCode == UserCollection.UserReturn.ReturnCodeType.Success)
            {
                ServerPeer.Log.Debug(user.LoginTime + " :User " + user.Nickname + " loginning...");

                // 用于选择的数据返回参数
                var parameter = new Dictionary<byte, object>();

                // 用于选择的字符串信息
                string message = "";

                // 用于选择的返回值
                short returnCode = -1;

                #region 获取角色资料

                Character character = new Character(user);
                CharacterCollection.CharacterReturn characterReturn =
                    peer.Server.Characters.SearchCharacter(character);

                // 若取得角色资料
                if (characterReturn.ReturnCode == CharacterCollection.CharacterReturn.ReturnCodeType.Success)
                {
                    byte[] playerBytes = Serialization.Serialize(character);
                    parameter.Add((byte) ParameterCode.Login, playerBytes);
                    returnCode = (short) ErrorCode.Ok;
                    message = "";

                    peer.Server.Characters.CharacterLoad(character);
                }
                else if (characterReturn.ReturnCode == CharacterNotFound)
                {
                    byte[] userBytes = Serialization.Serialize(user);
                    parameter.Add((byte) ParameterCode.Login, userBytes);
                    returnCode = (short) ErrorCode.CharacterNotFound;
                    message = characterReturn.DebugMessage.ToString();
                }

                #endregion

                OperationResponse response = new OperationResponse((byte) OperationCode.Login, parameter)
                {
                    ReturnCode = returnCode,
                    DebugMessage = message
                };
                peer.SendOperationResponse(response, sendParameters);
                ServerPeer.Log.Debug(user.LoginTime + " : User " + user.Account + " logins successfully");
            }
            // 若重复登录
            else if (userReturn.ReturnCode == RepeatedLogin)
            {
                OperationResponse response = new OperationResponse((byte) OperationCode.Login)
                {
                    ReturnCode = (short) ErrorCode.RepeatedOperation,
                    DebugMessage = "账号已登录!"
                };
                peer.SendOperationResponse(response, sendParameters);
                ServerPeer.Log.Debug(DateTime.Now + " : Failed to login " + user.Account + " Because of " +
                                     Enum.GetName(typeof (UserCollection.UserReturn.ReturnCodeType),
                                         userReturn.ReturnCode));
            }
            else
            {
                // 返回非法登录错误
                OperationResponse response = new OperationResponse((byte) OperationCode.Login)
                {
                    ReturnCode = (short) ErrorCode.InvalidOperation,
                    DebugMessage = userReturn.DebugMessage.ToString()
                };
                peer.SendOperationResponse(response, sendParameters);
                ServerPeer.Log.Debug(DateTime.Now + " : Failed to login " + user.Account + " Because of " +
                                     Enum.GetName(typeof (UserCollection.UserReturn.ReturnCodeType),
                                         userReturn.ReturnCode));
            }

            #endregion
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 类型:方法
        /// 名称:TryCreate
        /// 作者:taixihuase
        /// 作用:通过请求的角色数据,尝试创建、记录一个新的角色数据并再次返回给客户端
        /// 编写日期:2015/7/14
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        /// <param name="peer"></param>
        private static void TryCreate(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            ServerPeer.Log.Debug("Create a new character...");

            Character character = (Character)
                Serialization.Deserialize(operationRequest.Parameters[(byte) ParameterCode.CreateCharacter]);

            peer.Server.Data.CharacterData.CreateNewCharacter(character);
            peer.Server.Characters.CharacterLoad(character);

            byte[] data = Serialization.Serialize(character);

            var parameter = new Dictionary<byte, object>
            {
                {(byte) ParameterCode.CreateCharacter, data}
            };
            OperationResponse response = new OperationResponse((byte) OperationCode.CreateCharacter, parameter)
            {
                ReturnCode = (short) ErrorCode.Ok,
                DebugMessage = "创建角色成功!"
            };

            peer.SendOperationResponse(response, sendParameters);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 类型:方法
        /// 名称:TryLogin
        /// 作者:taixihuase
        /// 作用:通过登录数据尝试登录
        /// 编写日期:2015/7/14
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        /// <param name="peer"></param>
        private static void TryLogin(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            ServerPeer.Log.Debug("Logining...");

            LoginInfo login = (LoginInfo)
                              Serialization.Deserialize(operationRequest.Parameters[(byte)ParameterCode.Login]);

            #region 对账号密码进行判断

            ServerPeer.Log.Debug(DateTime.Now + " : Loginning...");
            ServerPeer.Log.Debug(login.Account);
            ServerPeer.Log.Debug(login.Password);

            // 获取用户资料
            UserInfo user = new UserInfo(peer.PeerGuid, login.Account);
            UserCollection.UserReturn userReturn = peer.Server.Users.UserOnline(user, login.Password);

            // 若成功取得用户资料
            if (userReturn.ReturnCode == UserCollection.UserReturn.ReturnCodeType.Success)
            {
                ServerPeer.Log.Debug(user.LoginTime + " :User " + user.Nickname + " loginning...");

                // 用于选择的数据返回参数
                var parameter = new Dictionary <byte, object>();

                // 用于选择的字符串信息
                string message = "";

                // 用于选择的返回值
                short returnCode = -1;

                #region 获取角色资料

                Character character = new Character(user);
                CharacterCollection.CharacterReturn characterReturn =
                    peer.Server.Characters.SearchCharacter(character);

                // 若取得角色资料
                if (characterReturn.ReturnCode == CharacterCollection.CharacterReturn.ReturnCodeType.Success)
                {
                    byte[] playerBytes = Serialization.Serialize(character);
                    parameter.Add((byte)ParameterCode.Login, playerBytes);
                    returnCode = (short)ErrorCode.Ok;
                    message    = "";

                    peer.Server.Characters.CharacterLoad(character);
                }
                else if (characterReturn.ReturnCode == CharacterNotFound)
                {
                    byte[] userBytes = Serialization.Serialize(user);
                    parameter.Add((byte)ParameterCode.Login, userBytes);
                    returnCode = (short)ErrorCode.CharacterNotFound;
                    message    = characterReturn.DebugMessage.ToString();
                }

                #endregion

                OperationResponse response = new OperationResponse((byte)OperationCode.Login, parameter)
                {
                    ReturnCode   = returnCode,
                    DebugMessage = message
                };
                peer.SendOperationResponse(response, sendParameters);
                ServerPeer.Log.Debug(user.LoginTime + " : User " + user.Account + " logins successfully");
            }
            // 若重复登录
            else if (userReturn.ReturnCode == RepeatedLogin)
            {
                OperationResponse response = new OperationResponse((byte)OperationCode.Login)
                {
                    ReturnCode   = (short)ErrorCode.RepeatedOperation,
                    DebugMessage = "账号已登录!"
                };
                peer.SendOperationResponse(response, sendParameters);
                ServerPeer.Log.Debug(DateTime.Now + " : Failed to login " + user.Account + " Because of " +
                                     Enum.GetName(typeof(UserCollection.UserReturn.ReturnCodeType),
                                                  userReturn.ReturnCode));
            }
            else
            {
                // 返回非法登录错误
                OperationResponse response = new OperationResponse((byte)OperationCode.Login)
                {
                    ReturnCode   = (short)ErrorCode.InvalidOperation,
                    DebugMessage = userReturn.DebugMessage.ToString()
                };
                peer.SendOperationResponse(response, sendParameters);
                ServerPeer.Log.Debug(DateTime.Now + " : Failed to login " + user.Account + " Because of " +
                                     Enum.GetName(typeof(UserCollection.UserReturn.ReturnCodeType),
                                                  userReturn.ReturnCode));
            }

            #endregion
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 类型:方法
        /// 名称:TryEnter
        /// 作者:taixihuase
        /// 作用:通过角色数据尝试进入场景
        /// 编写日期:2015/7/22
        /// </summary>
        /// <param name="operationRequest"></param>
        /// <param name="sendParameters"></param>
        /// <param name="peer"></param>
        private static void TryEnter(OperationRequest operationRequest, SendParameters sendParameters, ServerPeer peer)
        {
            ServerPeer.Log.Debug("Entering");

            int uniqueId = (int)
                Serialization.Deserialize(operationRequest.Parameters[(byte) ParameterCode.WorldEnter]);

            Character character;
            if (peer.Server.Characters.CharacterEnter(uniqueId, out character))
            {
                peer.Server.Data.CharacterData.GetCharacterPosition(character);
            }

            // 返回数据给客户端

            byte[] pos = Serialization.Serialize(character.Position);

            OperationResponse reponseData = new OperationResponse((byte) OperationCode.WorldEnter,
                new Dictionary<byte, object>
                {
                    {(byte) ParameterCode.WorldEnter, pos}
                })
            {
                ReturnCode = (short) ErrorCode.Ok,
                DebugMessage = "进入场景成功"
            };
            peer.SendOperationResponse(reponseData, sendParameters);

            byte[] data = Serialization.Serialize(character);
            EventData eventData = new EventData((byte) EventCode.WorldEnter, new Dictionary<byte, object>
            {
                {(byte) ParameterCode.WorldEnter, data}
            });
            eventData.SendTo(peer.Server.Characters.GamingClientsToBroadcast, sendParameters);
        }