generated from root/miduo_server
双重校验注册
parent
f28de9e226
commit
3f28e276fc
|
@ -13,7 +13,8 @@ import javax.servlet.ServletException;
|
||||||
import javax.servlet.http.HttpServlet;
|
import javax.servlet.http.HttpServlet;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.*;
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -151,32 +152,38 @@ public class GetUserController extends HttpServlet {
|
||||||
int uid = 0;
|
int uid = 0;
|
||||||
//加分布式锁
|
//加分布式锁
|
||||||
List<DBObject> userInfos = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_NAME, dbObject);
|
List<DBObject> userInfos = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_NAME, dbObject);
|
||||||
try{
|
if (userInfos.size() == 0) {
|
||||||
|
try{
|
||||||
boolean getLock=false;
|
boolean getLock=false;
|
||||||
while(!getLock){
|
while(!getLock){
|
||||||
getLock = BaseGlobal.getInstance().redisApp.tryGetDistributedLock(RedisKey.REGISTER_LOCK, "", "get", 800);
|
getLock = BaseGlobal.getInstance().redisApp.tryGetDistributedLock(RedisKey.REGISTER_LOCK, "", "get", 800);
|
||||||
if (getLock&&userInfos.size() == 0) {
|
if(getLock){
|
||||||
DBObject next = server_info.iterator().next();
|
userInfos = BaseGlobal.getInstance().mongoDBPool.find(_COLLECTION_NAME, dbObject);
|
||||||
Object register_state = next.get("register_state");
|
//双重校验
|
||||||
if(register_state!=null&& register_state.equals("0")){
|
if (userInfos.size() == 0) {
|
||||||
returnErrorToFront(res,response,"该服务器已停止注册,请选择其他服务器游戏");
|
DBObject next = server_info.iterator().next();
|
||||||
return;
|
Object register_state = next.get("register_state");
|
||||||
|
if(register_state!=null&& register_state.equals("0")){
|
||||||
|
returnErrorToFront(res,response,"该服务器已停止注册,请选择其他服务器游戏");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
uid = BaseGlobal.getInstance().mongoDBPool.inc("uid") + 10000000;
|
||||||
|
dbObject.put("uid", uid);
|
||||||
|
dbObject.put("_id", uid);
|
||||||
|
userInfos.add(dbObject);
|
||||||
|
if (gid != null && !gid.isEmpty()) {
|
||||||
|
dbObject.put("gid", gid);
|
||||||
|
}
|
||||||
|
if (pid != null && !pid.isEmpty()) {
|
||||||
|
dbObject.put("pid", pid);
|
||||||
|
}
|
||||||
|
BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_NAME, dbObject);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
uid = BaseGlobal.getInstance().mongoDBPool.inc("uid") + 10000000;
|
|
||||||
dbObject.put("uid", uid);
|
|
||||||
dbObject.put("_id", uid);
|
|
||||||
userInfos.add(dbObject);
|
|
||||||
if (gid != null && !gid.isEmpty()) {
|
|
||||||
dbObject.put("gid", gid);
|
|
||||||
}
|
|
||||||
if (pid != null && !pid.isEmpty()) {
|
|
||||||
dbObject.put("pid", pid);
|
|
||||||
}
|
|
||||||
BaseGlobal.getInstance().mongoDBPool.save(_COLLECTION_NAME, dbObject);
|
|
||||||
}
|
}
|
||||||
|
}finally {
|
||||||
|
BaseGlobal.getInstance().redisApp.releaseDistributedLock(RedisKey.REGISTER_LOCK,"","get");
|
||||||
}
|
}
|
||||||
}finally {
|
|
||||||
BaseGlobal.getInstance().redisApp.releaseDistributedLock(RedisKey.REGISTER_LOCK,"","get");
|
|
||||||
}
|
}
|
||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
int utoken = Math.abs(random.nextInt());
|
int utoken = Math.abs(random.nextInt());
|
||||||
|
|
Loading…
Reference in New Issue