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); } } }
/// <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)); } }
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); }
/// <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); }
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); }
/// <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); }
/// <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)); } }
/// <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 }
/// <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); }
/// <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 }
/// <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); }