public void Matching() { //没有匹配到就继续匹配 while (!isMatched) { lock (LocObj) { CTUser man = mPool[GlobalVar.SEX_MALE].MatchUser(); CTUser stranger = mPool[GlobalVar.SEX_FEMALE].MatchUser(); if (stranger != null && stranger != null) { string id = System.Guid.NewGuid().ToString(); man.Chatid = id; stranger.Chatid = id; moveUser(GlobalVar.STATE_BUSY, man.Uid); moveUser(GlobalVar.STATE_BUSY, stranger.Uid); //推送给用户匹配成功通知 List <CTUser> listuser = new List <CTUser>(); listuser.Add(man); listuser.Add(stranger); mChattingRoom.Add(id, listuser); //推送信息包括:State:success,Stranger:uid CTPushMsg.Send(man.ConnectionId, "匹配成功了铁子"); CTPushMsg.Send(stranger.ConnectionId, "匹配成功了铁子"); } } if (mPool[GlobalVar.SEX_MALE].isPendingEmpty() || mPool[GlobalVar.SEX_FEMALE].isPendingEmpty()) { Thread.Sleep(3000); } Thread.Sleep(2000); } }
//状态切换 public CTUser MoveUser(Dictionary <string, CTUser> tmpList, int to, string uid) { CTUser tmpUser = null; lock (LocObj) { //先寻找后添加再移除 if (tmpList != null && tmpList.Count > 0) { tmpUser = tmpList[uid]; if (tmpUser == null) { return(null); } switch (to) { case GlobalVar.STATE_NONE: if (mList.ContainsKey(uid)) { if (!tmpUser.Chatid.Equals("")) { tmpUser.Chatid = ""; } mList.Add(tmpUser.Uid, tmpUser); tmpUser.State = GlobalVar.STATE_NONE + ""; } break; case GlobalVar.STATE_PENDING: if (mList.ContainsKey(uid)) { if (!tmpUser.Chatid.Equals("")) { tmpUser.Chatid = ""; } mPending.Add(tmpUser.Uid, tmpUser); tmpUser.State = GlobalVar.STATE_PENDING + ""; } break; case GlobalVar.STATE_BUSY: if (mList.ContainsKey(uid) && !tmpUser.Chatid.Equals("")) { mBusy.Add(tmpUser.Uid, tmpUser); tmpUser.State = GlobalVar.STATE_BUSY + ""; } break; } tmpList.Remove(uid); } else { return(null);; } } return(tmpUser); }
//登录操作 public void AddUser(CTUser user) { lock (LocObj) { if (mList != null && !mList.ContainsKey(user.Uid)) { mList.Add(user.Uid, user); } } }
public void addUser(CTUser user) { if (user.Sex.Equals("")) { return; } TempPool tp = mPool[user.Sex]; tp.AddUser(user); }
protected override Task OnReceived(IRequest request, string connectionId, string data) { /***********************2017-09-08 邵国鑫***/ //1.转发消息到对应id //2.连接信息 添加新用户 try { CTData <Object> d = new CTData <Object>(); d = JsonConvert.DeserializeObject <CTData <Object> >(data); //初始json if (d != null) { switch (d.DataType) { case CTData <Object> .DATATYPE_CONNECTED: CTData <CTUser> s = JsonConvert.DeserializeObject <CTData <CTUser> >(data); CTUser user = s.Body; CTAreaPool.getInstance().addUser(user); CTUserBase userbase = new CTUserBase(); userbase.Sex = user.Sex; userbase.Uid = user.Uid; userbase.School = user.School; if (!mClients.ContainsKey(connectionId)) { mClients.Add(connectionId, userbase); } if (!mFastClients.ContainsKey(user.Uid)) { mFastClients.Add(user.Uid, connectionId); } break; case CTData <Object> .DATATYPE_MESSAGE: CTData <CTMessage> ctmsg = JsonConvert.DeserializeObject <CTData <CTMessage> >(data); //文本信息 CTMessage msg = ctmsg.Body; if (mFastClients.Count > 0 && mFastClients.ContainsKey(msg.To)) { Connection.Send(mFastClients[msg.To], ctmsg.Body.Body); } break; } } } catch (Exception e) { string x = e.Message; } return(base.OnReceived(request, connectionId, data)); }
public void addUser(CTUser user) { if (user.Sex.Equals("")) { return; } if (user.Sex != GlobalVar.SEX_MALE && user.Sex != GlobalVar.SEX_FEMALE) { return; } TempPool tp = mPool[user.Sex]; tp.AddUser(user); }
//新用户加入 public void addUser(CTUser user) { if (user == null || user.School == null || user.School.SCode.Equals("")) { return; } if (mPool.ContainsKey(user.School.SCode)) { mPool[user.School.SCode].addUser(user); } else { ctUserPool tmpUserPool = new ctUserPool(); tmpUserPool.addUser(user); mPool.Add(user.School.SCode, tmpUserPool); } }
public void Matching() { //没有匹配到就继续匹配 while (!IsMatched) { lock (LocObj) { try { CTUser man = mPool[GlobalVar.SEX_MALE].MatchUser(); CTUser stranger = mPool[GlobalVar.SEX_FEMALE].MatchUser(); if (stranger != null && man != null) { string id = System.Guid.NewGuid().ToString(); man.Chatid = id; stranger.Chatid = id; moveUser(GlobalVar.STATE_BUSY, man.Uid); moveUser(GlobalVar.STATE_BUSY, stranger.Uid); //推送给用户匹配成功通知 List <CTUser> listuser = new List <CTUser>(); listuser.Add(man); listuser.Add(stranger); mChattingRoom.Add(id, listuser); //推送信息包括:State:success,Stranger:uid CTData <string> data = new CTData <string>(); data.DataType = CTData <string> .DATATYPE_REPLY; data.Body = stranger.Uid; CTPushMsg.Send(man.ConnectionId, JsonConvert.SerializeObject(data)); data.Body = man.Uid; CTPushMsg.Send(stranger.ConnectionId, JsonConvert.SerializeObject(data)); } } catch { mMatchThread = new Thread(Matching); mMatchThread.Start(); } } if (mPool[GlobalVar.SEX_MALE].isPendingEmpty() || mPool[GlobalVar.SEX_FEMALE].isPendingEmpty()) { Thread.Sleep(2000); } Thread.Sleep(1000); } }
//登录操作 public void AddUser(CTUser user) { lock (LocObj) { if (mList != null) { if (!mList.ContainsKey(user.Uid)) { mList.Add(user.Uid, user); } else { mList[user.Uid] = user;//异常掉线更新 } } } }
public bool moveUser(int to, string uid) { Dictionary <string, CTUser> tmp = null; tmp = mPool[ctUtils.getSexbyUid(uid)].hasUser(uid); if (tmp != null) { CTUser user = mPool[ctUtils.getSexbyUid(uid)].MoveUser(tmp, to, uid); //解决聊天室 单向关闭 if (user != null && to == GlobalVar.STATE_NONE) { lock (LocObj) { if (mChattingRoom.ContainsKey(user.Chatid)) { List <CTUser> list = mChattingRoom[user.Chatid]; foreach (CTUser tu in list) { if (!tu.Uid.Equals(user.Uid)) { tu.Chatid = ""; tu.State = GlobalVar.STATE_PENDING + ""; moveUser(GlobalVar.STATE_PENDING, tu.Uid); CTData <string> msg = new CTData <string>(); msg.DataType = CTData <string> .DATATYPE_CONNECTED; msg.Body = "next"; CTPushMsg.Send(tu.ConnectionId, JsonConvert.SerializeObject(msg)); } } mChattingRoom.Remove(user.Chatid); user.Chatid = ""; } } } return(true); } else { return(false); } }
public bool moveUser(int to, string uid) { Dictionary <string, CTUser> tmp = null; tmp = mPool[ctUtils.getSexbyUid(uid)].hasUser(uid); if (tmp != null) { CTUser user = mPool[ctUtils.getSexbyUid(uid)].MoveUser(tmp, to, uid); //解决聊天室 单向关闭 if (user != null) { lock (LocObj) { if (mChattingRoom.ContainsKey(user.Chatid)) { List <CTUser> list = mChattingRoom[user.Chatid]; foreach (CTUser tu in list) { if (!tu.Uid.Equals(user.Uid)) { tu.Chatid = ""; tu.State = GlobalVar.STATE_PENDING + ""; moveUser(GlobalVar.STATE_PENDING, tu.Uid); CTPushMsg.Send(tu.ConnectionId, "结束聊天"); } } mChattingRoom.Remove(user.Chatid); } } } return(true); } else { return(false); } }
//新用户加入 public void addUser(CTUser user) { if (user == null || user.School == null || user.School.SCode.Equals("")) { return; } if (mPool.ContainsKey(user.School.SCode)) { mPool[user.School.SCode].addUser(user); if (mPool[user.School.SCode].IsMatched) { mPool[user.School.SCode].StartMatch(); } } else { ctUserPool tmpUserPool = new ctUserPool(); tmpUserPool.addUser(user); tmpUserPool.StartMatch(); mPool.Add(user.School.SCode, tmpUserPool); schoolCount++; } count++; }
protected override Task OnReceived(IRequest request, string connectionId, string data) { /***********************2017-09-08 邵国鑫***/ //1.转发消息到对应id //2.连接信息 添加新用户 lock (LocObj) { try { CTData <Object> d = new CTData <Object>(); d = JsonConvert.DeserializeObject <CTData <Object> >(data); //初始json if (d != null) { switch (d.DataType) { case CTData <Object> .DATATYPE_CONNECTED: lock (LocObj) { CTData <CTUser> s = JsonConvert.DeserializeObject <CTData <CTUser> >(data); CTUser user = s.Body; user.ConnectionId = connectionId; CTAreaPool.getInstance().addUser(user); CTUserBase userbase = new CTUserBase(); userbase.Sex = user.Sex; userbase.Uid = user.Uid; userbase.School = user.School; if (!GlobalVar.mClients.ContainsKey(connectionId)) { GlobalVar.mClients.Add(connectionId, userbase); } else { GlobalVar.mClients[connectionId] = userbase; } if (!mFastClients.ContainsKey(user.Uid)) { mFastClients.Add(user.Uid, connectionId); } else { mFastClients[user.Uid] = connectionId; } } break; case CTData <Object> .DATATYPE_MESSAGE: CTData <CTMessage> ctmsg = JsonConvert.DeserializeObject <CTData <CTMessage> >(data); CTMessage msg = ctmsg.Body; if (mFastClients.Count > 0 && mFastClients.ContainsKey(msg.To)) { Connection.Send(mFastClients[msg.To], data); } /* * * * switch (msg.Type) * { * //文本信息 * case CTMessage.MESSAGE_TYPE_TEXT: * * break; * case CTMessage.MESSAGE_TYPE_EMOJI: break; * case CTMessage.MESSAGE_TYPE_AUDIO: break; * case CTMessage.MESSAGE_TYPE_PHOTO: break; * }*/ break; } } } catch (Exception e) { string x = e.Message; } } return(base.OnReceived(request, connectionId, data)); }