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