GameFramework.NicknameSystem.RequestNicknames C# (CSharp) Method

RequestNicknames() private method

private RequestNicknames ( string accountId ) : List
accountId string
return List
        internal List<string> RequestNicknames(string accountId)
        {
            const int c_MaxRandomCount = 1000;
              lock (m_Lock) {
            List<string> nicknameList = new List<string>();
            RevertAccountNicknames(accountId);
            if (m_UnusedNicknames.Count > c_NumberForOneRequest) {
              int leftCount = m_UnusedNicknames.Count - c_NumberForOneRequest;
              int randomStart = m_Random.Next(0, leftCount > c_MaxRandomCount ? c_MaxRandomCount : leftCount);
              int index = 0;
              foreach (KeyValuePair<string, NicknameInfo> pair in m_UnusedNicknames) {
            string key = pair.Key;
            if (null != key) {
              if (index < randomStart) {
                index++;
              } else if (index < randomStart + c_NumberForOneRequest) {
                nicknameList.Add(key);
                index++;
              } else {
                break;
              }
            }
              }
            } else {
              foreach (KeyValuePair<string, NicknameInfo> pair in m_UnusedNicknames) {
            string key = pair.Key;
            if (null != key) {
              nicknameList.Add(key);
            }
              }
            }
            if (nicknameList.Count > 0) {
              NicknameInfo outValue;
              for (int i = 0; i < nicknameList.Count; ++i) {
            if (m_UnusedNicknames.TryRemove(nicknameList[i], out outValue)) {
              m_UsedNicknames.AddOrUpdate(nicknameList[i], outValue, (g, u) => u);
            }
              }
              m_AccountReqNicknames.AddOrUpdate(accountId, nicknameList, (g, u) => nicknameList);
            } else {
              //可用的昵称为空时,向客户端传送已使用的昵称
              if (m_UsedNicknames.Count > c_NumberForOneRequest) {
            int leftCount = m_UsedNicknames.Count - c_NumberForOneRequest;
            int randomStart = m_Random.Next(0, leftCount > c_MaxRandomCount ? c_MaxRandomCount : leftCount);
            int index = 0;
            foreach (KeyValuePair<string, NicknameInfo> pair in m_UsedNicknames) {
              string key = pair.Key;
              if (null != key) {
                if (index < randomStart) {
                  index++;
                } else if (index < randomStart + c_NumberForOneRequest) {
                  nicknameList.Add(key);
                  index++;
                } else {
                  break;
                }
              }
            }
              } else {
            foreach (KeyValuePair<string, NicknameInfo> pair in m_UnusedNicknames) {
              string key = pair.Key;
              if (null != key) {
                nicknameList.Add(key);
              }
            }
              }
            }
            return nicknameList;
              }
        }