Example #1
0
        /// <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);
            }
        }
Example #2
0
 public void AddConnectedPeer(Guid guid, MPServerPeer serverPeer)    // 加入連接的Peer
 {
     ConnectedClients.Add(guid, serverPeer);
 }