/// <summary> /// 登出一筆會員資料,會順便移除Peer /// </summary> /// <param name="primaryID"></param> public void ActorKick(int primaryID) { isKick = !isKick; Log.Debug("KICK"); ActorReturn actorReturn = new ActorReturn(); Guid guid = Guid.Empty; lock (this) { try { if (PrimaryGetGuid.ContainsKey(primaryID)) { guid = GetGuidFromPrimary(primaryID); RemoveConnectedPeer(guid); // 移除Peer Log.Debug("(IN)HE Guid IS :" + guid); } Log.Debug("(OUT)HE Guid IS :" + guid); int _PrimaryID = 0; if (GuidGetPrimary.ContainsKey(guid)) // 若有資料 { Log.Debug("KICK 移除GUID:" + guid); _PrimaryID = GuidGetPrimary[guid]; GuidGetPrimary.Remove(guid); // 移除guid列表資料 if (PrimaryGetActor.ContainsKey(_PrimaryID)) // 若會員列表有資料 { Actor actor = GetActorFromPrimary(_PrimaryID); // 先取得會員資料 if (PrimaryGetNickname.ContainsKey(_PrimaryID)) // 移除 索引找會員名稱列表 { PrimaryGetNickname.Remove(_PrimaryID); } if (PrimaryGetAccount.ContainsKey(_PrimaryID)) // 移除 索引找會員名稱列表 { PrimaryGetAccount.Remove(_PrimaryID); } if (PrimaryGetGuid.ContainsKey(_PrimaryID)) // 移除線上GUID名稱列表 { PrimaryGetGuid.Remove(_PrimaryID); } if (AccountGetPrimary.ContainsKey(actor.Account)) // 移除會員帳號索引列表資料 { AccountGetPrimary.Remove(actor.Account); } if (NicknameGetPrimary.ContainsKey(actor.Nickname)) // 移除會員暱稱索引列表資料 { NicknameGetPrimary.Remove(actor.Nickname); } PrimaryGetActor.Remove(_PrimaryID); // 移除會員列表資料 actorReturn.ReturnCode = "S308"; actorReturn.DebugMessage = "移除玩家成功"; } } } catch (Exception e) { Log.Debug("沒移除PrimaryID:" + primaryID); actorReturn.ReturnCode = "S309"; actorReturn.DebugMessage = "不在線上列表 " + e.Message; } } }
/// <summary> /// 加入一筆線上會員資料(成功回傳 (1),不成功回傳 (2)錯誤碼) /// </summary> /// <param name="guid"></param> /// <param name="PrimaryID"></param> /// <param name="Account"></param> /// <param name="Nickname"></param> /// <param name="Age"></param> /// <param name="Sex"></param> /// <param name="IP"></param> /// <param name="ServerPeer"></param> /// <returns></returns> public ActorReturn ActorOnline(Guid guid, int PrimaryID, string Account, string Nickname, byte Age, byte Sex, string IP, MPServerPeer serverPeer) { ActorReturn actorReturn = new ActorReturn(); actorReturn.ReturnCode = "S300"; if (PrimaryID <= 0) { actorReturn.ReturnCode = "S303"; actorReturn.DebugMessage = "PrimaryID必須有索引值!"; return(actorReturn); } if (Account.Length <= 0) { actorReturn.ReturnCode = "S304"; actorReturn.DebugMessage = "Account必須填入帳號!"; return(actorReturn); } if (Nickname.Length <= 0) { actorReturn.ReturnCode = "S305"; actorReturn.DebugMessage = "Nickname必須填入角色名稱!"; return(actorReturn); } if (Age <= 0) { actorReturn.ReturnCode = "S306"; actorReturn.DebugMessage = "Age必須填入年齡!"; return(actorReturn); } if (Sex < 0) { actorReturn.ReturnCode = "S307"; actorReturn.DebugMessage = "Sex必須填入性別!"; return(actorReturn); } try { lock (this) { // PrimaryGetGuid[i] 不能有null值 不能用來判斷bool ,PrimaryGetGuid.ContainsKey(i) 可以用來判斷bool // 檢查dictGetAccounts的索引確保沒有重複登入 if (PrimaryGetGuid.ContainsKey(PrimaryID)) { actorReturn.ReturnCode = "S302"; actorReturn.DebugMessage = "重複登入!"; return(actorReturn); // 不允許重複登入 } else { Log.Debug("登入的GUID:" + guid); GuidGetPrimary.Add(guid, PrimaryID); // 加入guid索引會員編號的列表 Actor actor = new Actor(guid, PrimaryID, Account, Nickname, Age, Sex, IP); actor.LoginTime = System.DateTime.Now; // 登入時間 actor.GameStatus = 1; // 代表上線中(閒置) if (!ConnectedClients.ContainsKey(guid)) { ConnectedClients.Add(guid, serverPeer); Log.Debug("ADD Peer!"); } if (!PrimaryGetActor.ContainsKey(PrimaryID)) { PrimaryGetActor.Add(PrimaryID, actor); // 加入線上會員列表 } if (!PrimaryGetNickname.ContainsKey(PrimaryID)) // 加入線上會員名稱 索引 { PrimaryGetNickname.Add(PrimaryID, Nickname); } if (!PrimaryGetAccount.ContainsKey(PrimaryID)) // 加入線上帳號名稱 索引 { PrimaryGetAccount.Add(PrimaryID, Account); } if (!PrimaryGetGuid.ContainsKey(PrimaryID)) // 加入線上GUID名稱 索引 { PrimaryGetGuid.Add(PrimaryID, guid); } if (!AccountGetPrimary.ContainsKey(Account)) // 若會員帳號索引會員編號列表沒有資料,加入索引 { AccountGetPrimary.Add(Account, PrimaryID); } if (!NicknameGetPrimary.ContainsKey(Nickname)) // 若會員帳號暱稱索引會員編號列表沒有資料,加入索引 { NicknameGetPrimary.Add(Nickname, PrimaryID); } actorReturn.ReturnCode = "S301"; // 加入線上會員資料成功 actorReturn.DebugMessage = ""; } } return(actorReturn); } catch (Exception e) { Log.Debug("Actors例外: " + e); actorReturn.ReturnCode = "S399"; // 加入線上會員資料成功 actorReturn.DebugMessage = "未知例外情況"; return(actorReturn); } }
/// <summary> /// 登出一筆會員資料,會順便移除Peer /// </summary> /// <param name="Guid"></param> public void ActorOffline(Guid guid) { if (!isKick) { ActorReturn actorReturn = new ActorReturn(); lock (this) { try { RemoveConnectedPeer(guid); // 移除Peer int _PrimaryID = 0; if (GuidGetPrimary.ContainsKey(guid)) // 若有資料 { Log.Debug("OFF 移除GUID:" + guid); _PrimaryID = GuidGetPrimary[guid]; GuidGetPrimary.Remove(guid); // 移除guid列表資料 if (PrimaryGetActor.ContainsKey(_PrimaryID)) // 若會員列表有資料 { Actor actor = GetActorFromPrimary(_PrimaryID); // 先取得會員資料 if (PrimaryGetNickname.ContainsKey(_PrimaryID)) // 移除 索引找會員名稱列表 { PrimaryGetNickname.Remove(_PrimaryID); } if (PrimaryGetAccount.ContainsKey(_PrimaryID)) // 移除 索引找會員名稱列表 { PrimaryGetAccount.Remove(_PrimaryID); } if (PrimaryGetGuid.ContainsKey(_PrimaryID)) // 移除線上GUID名稱列表 { PrimaryGetGuid.Remove(_PrimaryID); } if (AccountGetPrimary.ContainsKey(actor.Account)) // 移除會員帳號索引列表資料 { AccountGetPrimary.Remove(actor.Account); } if (NicknameGetPrimary.ContainsKey(actor.Nickname)) // 移除會員暱稱索引列表資料 { NicknameGetPrimary.Remove(actor.Nickname); } PrimaryGetActor.Remove(_PrimaryID); // 移除會員列表資料 actorReturn.ReturnCode = "S308"; actorReturn.DebugMessage = "移除玩家成功!"; } } } catch (Exception e) { Log.Debug("沒移除GUID:" + guid); actorReturn.ReturnCode = "S309"; actorReturn.DebugMessage = "不在線上列表 " + e.Message; } } } }