private void AlreadyOnline(ulong guid) { var data_scdr = LobbyServer.Instance.DataProcessScheduler; UserInfo user = data_scdr.GetUserInfo(guid); //处理账号重复登录的问题:根据玩家当前状态分别处理 if (user.CurrentState == UserState.Quit) { //GameClient中途退出,玩家状态为Quit user.BillingPlayer = billing_player_; user.NodeName = NodeName; user.LeftLife = UserInfo.LifeTimeOfNoHeartbeat; JsonMessageUserInfo userInfoMsg = new JsonMessageUserInfo(); userInfoMsg.m_Account = Account; userInfoMsg.m_Guid = user.Guid; userInfoMsg.m_Nick = user.Nickname; userInfoMsg.m_Level = user.Level; userInfoMsg.m_Sign = user.Sign; JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, userInfoMsg); LogSys.Log(LOG_TYPE.DEBUG, "DoAccountLogin,guid:{0},nick:{1},acc:{2},node:{3}", user.Guid, user.Nickname, user.Account, user.NodeName); //向LobbyClient发送断线重连消息 JsonMessageUserQuitRoom uqrMsg = new JsonMessageUserQuitRoom(); uqrMsg.m_Guid = user.Guid; uqrMsg.m_RoomID = user.CurrentRoomID; uqrMsg.m_IsEndQuit = false; JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, user.NodeName, uqrMsg); Next("BillingOnline", user); } else if (user.CurrentState == UserState.Game && user.LeftLife <= 0) { //LobbyClient中途退出,GameClient仍在,玩家状态为Game //应验证LobbyClient是同一个IP user.BillingPlayer = billing_player_; user.NodeName = NodeName; user.LeftLife = UserInfo.LifeTimeOfNoHeartbeat; JsonMessageUserInfo userInfoMsg = new JsonMessageUserInfo(); userInfoMsg.m_Account = Account; userInfoMsg.m_Guid = user.Guid; userInfoMsg.m_Nick = user.Nickname; userInfoMsg.m_Level = user.Level; userInfoMsg.m_Sign = user.Sign; JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, userInfoMsg); LogSys.Log(LOG_TYPE.DEBUG, "DoAccountLogin,guid:{0},nick:{1},acc:{2},node:{3}", user.Guid, user.Nickname, user.Account, user.NodeName); Next("BillingOnline", user); } else { //向第二个登录的玩家返回重复登录的错误信息 JsonMessageAccountRepeatLogin accRepeatLoginMsg = new JsonMessageAccountRepeatLogin(); accRepeatLoginMsg.m_Account = Account; JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, accRepeatLoginMsg); string errorMsg = "Account already online : " + Account; LogSys.Log(LOG_TYPE.ERROR, errorMsg); Next("End"); } }
public override void OnMessage(JsonMessage msg) { var reply = msg as JsonMessageCreateNick; if (LobbyConfig.DataStoreAvailable) { var dsc = LobbyServer.Instance.DataStoreConnector; dsc.Load <DS_Nickname>(reply.m_Nick, (e, d) => LoadNicknameCallback(e, d, reply.m_Nick)); } else { var data_scdr = LobbyServer.Instance.DataProcessScheduler; var guid = data_scdr.GetGuidByNick(reply.m_Nick); if (guid == 0) { JsonMessageCreateNickResult cnResultMsg = new JsonMessageCreateNickResult(); cnResultMsg.m_Account = Account; cnResultMsg.m_Result = (int)CreateNickResult.NICK_SUCCESS; cnResultMsg.m_Nick = reply.m_Nick; JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, cnResultMsg); //创建新的玩家角色 ++s_tempguid_; var user = data_scdr.NewUserInfo(); user.BillingPlayer = billing_player_; user.Guid = s_tempguid_; user.Account = Account; user.Nickname = reply.m_Nick; user.NodeName = NodeName; user.Sign = "Dash Fire"; user.LeftLife = UserInfo.LifeTimeOfNoHeartbeat; data_scdr.DoUserLogin(user); JsonMessageUserInfo userInfoMsg = new JsonMessageUserInfo(); userInfoMsg.m_Account = user.Account; userInfoMsg.m_Guid = user.Guid; userInfoMsg.m_Nick = user.Nickname; userInfoMsg.m_Level = user.Level; userInfoMsg.m_Sign = user.Sign; JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, userInfoMsg); LogSys.Log(LOG_TYPE.DEBUG, "DoAccountLogin,guid:{0},nick:{1},acc:{2},node:{3}", user.Guid, user.Nickname, user.Account, user.NodeName); Next("BillingOnline", user); } else { LogSys.Log(LOG_TYPE.ERROR, "Duplicated nickname: {0}", reply.m_Nick); JsonMessageCreateNickResult cnResultMsg = new JsonMessageCreateNickResult(); cnResultMsg.m_Account = Account; cnResultMsg.m_Result = (int)CreateNickResult.NICK_REPEAT_ERROR; cnResultMsg.m_Nick = reply.m_Nick; JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, cnResultMsg); } } }
public void CreateNickNameAuto() { //直接指定玩家账号为玩家昵称 string autoNickname = Account; if (LobbyConfig.DataStoreAvailable) { var dsc = LobbyServer.Instance.DataStoreConnector; dsc.Load <DS_Nickname>(autoNickname, (e, d) => LoadNicknameCallbackAuto(e, d, autoNickname)); Pending(); } else { var data_scdr = LobbyServer.Instance.DataProcessScheduler; var guid = data_scdr.GetGuidByNick(autoNickname); if (guid == 0) { //创建新的玩家角色 ++s_tempguid_; var user = data_scdr.NewUserInfo(); user.BillingPlayer = billing_player_; user.Guid = s_tempguid_; user.Account = Account; user.Nickname = autoNickname; user.NodeName = NodeName; user.Sign = "Dash Fire"; user.LeftLife = UserInfo.LifeTimeOfNoHeartbeat; data_scdr.DoUserLogin(user); JsonMessageUserInfo userInfoMsg = new JsonMessageUserInfo(); userInfoMsg.m_Account = user.Account; userInfoMsg.m_Guid = user.Guid; userInfoMsg.m_Nick = user.Nickname; userInfoMsg.m_Level = user.Level; userInfoMsg.m_Sign = user.Sign; JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, userInfoMsg); LogSys.Log(LOG_TYPE.DEBUG, "DoAccountLogin,guid:{0},nick:{1},acc:{2},node:{3}", user.Guid, user.Nickname, user.Account, user.NodeName); Next("BillingOnline", user); } else { //理论上不会出现重复昵称 string errorMsg = "Duplicated nickname:" + autoNickname; LogSys.Log(LOG_TYPE.ERROR, errorMsg); Next("End", GetType().Name, errorMsg); } } }
private void NextGuidCallback(string error, long guid, string nickname) { var data_scdr = LobbyServer.Instance.DataProcessScheduler; if (null == error) { UserInfo user = data_scdr.NewUserInfo(); user.BillingPlayer = billing_player_; user.Account = Account; user.Guid = (ulong)guid; //从数据库得到的guid起始值为0,+1使其从1开始 user.Level = 1; user.Nickname = nickname; user.Sign = "Dash Fire DS"; user.NodeName = NodeName; user.LeftLife = UserInfo.LifeTimeOfNoHeartbeat; data_scdr.DoUserLogin(user); //一个新玩家信息创建完成,保存到数据库中 var ds_thread = LobbyServer.Instance.DataStoreThread; ds_thread.QueueAction(ds_thread.DSSaveAccount, user); ds_thread.QueueAction(ds_thread.DSSaveUserInfo, user); //向客户端发送玩家数据 JsonMessageUserInfo userInfoMsg = new JsonMessageUserInfo(); userInfoMsg.m_Account = user.Account; userInfoMsg.m_Guid = user.Guid; userInfoMsg.m_Nick = user.Nickname; userInfoMsg.m_Level = user.Level; userInfoMsg.m_Sign = user.Sign; JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, userInfoMsg); LogSys.Log(LOG_TYPE.DEBUG, "DoAccountLogin,User New! guid:{0},nick:{1},acc:{2},node:{3}", user.Guid, user.Nickname, user.Account, user.NodeName); Next("BillingOnline", user); } else { Next("End", GetType().Name, error); } }
private void LoadUserInfoCallback(string error, DS_UserInfo data, long guid) { var data_scdr = LobbyServer.Instance.DataProcessScheduler; if (null != error) { Next("End", GetType().Name, error); } else { LogSys.Log(LOG_TYPE.INFO, "Load {0} data success: {1}", guid, data.Account); UserInfo user = data_scdr.NewUserInfo(); user.BillingPlayer = billing_player_; user.Guid = (ulong)data.Guid; user.Account = data.Account; user.Nickname = data.Nickname; user.Level = data.Level; user.ExpPoints = data.Exp; user.Gold = data.Gold; user.NodeName = NodeName; user.LeftLife = UserInfo.LifeTimeOfNoHeartbeat; data_scdr.DoUserLogin(user); /////////////////////// //向客户端发送玩家数据 JsonMessageUserInfo userInfoMsg = new JsonMessageUserInfo(); userInfoMsg.m_Account = user.Account; userInfoMsg.m_Guid = user.Guid; userInfoMsg.m_Nick = user.Nickname; userInfoMsg.m_Level = user.Level; userInfoMsg.m_Sign = user.Sign; JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, userInfoMsg); LogSys.Log(LOG_TYPE.DEBUG, "DoAccountLogin,User New! guid:{0},nick:{1},acc:{2},node:{3}", user.Guid, user.Nickname, user.Account, user.NodeName); Next("BillingOnline", user); } }