/// <summary> /// 解散牌桌 /// </summary> /// <param name="r"></param> /// <param name="messageNum">返回消息号</param> /// <param name="type">解散类型</param> public void DissolutionRoom(Room r, int messageNum, int type) { List <mjuser> listuser = Gongyong.mulist.FindAll(u => u.RoomID == r.RoomID); var Returnjs = ReturnAllIdea.CreateBuilder().SetState(1).SetMessgaeType(type); byte[] Sdata = Returnjs.Build().ToByteArray(); //if (Gongyong.userlist.Count == 0) // return; foreach (var item in listuser) { UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid); if (user != null) { //RedisUtility.Get<RedisLoginModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, gameOperation.Openid, gameOperation.Unionid)); //将用户游戏信息更新 RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, user.openid, user.unionid)); //RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, user.openid, user.unionid)); user.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5007, Sdata.Length, messageNum, Sdata))); } } Gongyong.roomlist.Remove(r); Gongyong.mulist.RemoveAll(u => u.RoomID == r.RoomID); RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, r.RoomID.ToString(), "")); new RoomInfoDAL().UpdateEndRoomInfoByRoomInfoID(new RoomInfo { RoomInfoID = r.RoomInfoID, EndTime = DateTime.Now, EndStatus = type }); }
/// <summary> /// 解散牌桌 /// </summary> /// <param name="roomId"></param> /// <param name="MessageNum"></param> public void DisbandTable(object state) { var countdownInfo = state as CountdownInfo; RoomClear r = Gongyong.roomclear.Find(u => u.RoomID == countdownInfo.roomID); if (r == null) { return; } ThreadUtility.RemoveManagedThreadByRoomID(countdownInfo.roomID);//取消托管 List <mjuser> listmj = Gongyong.mulist.FindAll(u => u.RoomID == countdownInfo.roomID); var senddjs = ReturnDJS.CreateBuilder(); CardUser card = Gongyong.FKUser.Find(u => u.roomid == countdownInfo.roomID); string userWinLose = string.Empty; foreach (var item in listmj) { UserInfo gamer = Gongyong.userlist.Find(u => u.openid == item.Openid); if (gamer == null) { continue; } var users = Userinfo.CreateBuilder().SetHeadimg(gamer.headimg).SetNickname(gamer.nickname).SetOpenid(gamer.openid).SetSex(int.Parse(gamer.sex)).SetUserFW(item.ZS_Fw).SetUserBean(0).SetUserGold(0).SetUserID(gamer.UserID).Build(); var jsddr = UserAJS.CreateBuilder(); jsddr.SetUser(users); jsddr.SetZdou(item.zwd_count); jsddr.SetZimo(item.zm_count); jsddr.SetAndou(item.ad_count); jsddr.SetMdou(item.MD_count); jsddr.SetDianpao(item.dp_count); switch (item.ZS_Fw) { case 1: jsddr.SetScare(card == null ? 0 : card.dong); break; case 2: jsddr.SetScare(card == null ? 0 : card.nan); break; case 3: jsddr.SetScare(card == null ? 0 : card.xi); break; case 4: jsddr.SetScare(card == null ? 0 : card.bei); break; default: break; } senddjs.AddUserjs(jsddr); senddjs.SetState(2); if (!string.IsNullOrEmpty(userWinLose)) { userWinLose += "|"; } userWinLose += gamer.UserID + "," + jsddr.Scare; } senddjs.SetState(2); Gongyong.mulist.RemoveAll(u => u.RoomID == countdownInfo.roomID); var roomInfo = Gongyong.roomlist.Find(w => w.RoomID == countdownInfo.roomID); Gongyong.roomlist.RemoveAll(u => u.RoomID == countdownInfo.roomID); var alldata = ReturnAllIdea.CreateBuilder().SetState(1).SetMessgaeType(3).Build(); byte[] bytesss = alldata.ToByteArray(); byte[] bsenddjs = senddjs.Build().ToByteArray(); foreach (var item in listmj) { UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid); if (user != null) { user.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5007, bytesss.Length, countdownInfo.MessageNum, bytesss)));//yi user.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5014, bsenddjs.Length, countdownInfo.MessageNum, bsenddjs))); RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, user.openid, user.unionid)); } } foreach (var item in Gongyong.msg.FindAll(w => w.RoomID == r.RoomID)) { Gongyong.msg.Remove(item); } RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, r.RoomID.ToString(), "")); new RoomInfoDAL().UpdateEndRoomInfoByRoomInfoID(new RoomInfo { RoomInfoID = roomInfo.RoomInfoID, EndTime = DateTime.Now, EndStatus = 3, UserWinLose = userWinLose }); foreach (var item in listmj) { UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid); new userRecordLOGDAL().Add(new userRecordlogLOG { UserID = user.UserID, RoomInfoID = roomInfo.RoomInfoID, UserWinLose = userWinLose, EndTime = DateTime.Now, CreateDate = roomInfo.CreateDate, RoomID = r.RoomID }); } }
public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo) { if (!Gongyong.userlist.Any(w => w.session.SessionID.Equals(session.SessionID))) { session.Logger.Debug("ClearByUser : 非法连接"); session.Close(); return; } var getdata = SendJSIdea.ParseFrom(requestInfo.Body); session.Logger.Debug(getdata.ToString()); RoomClear r = Gongyong.roomclear.Find(u => u.RoomID == getdata.Roomid); if (r == null) { return; } else { if (getdata.State == 1) { r.RoomPeo.RemoveAll(u => u == getdata.Openid); if (ThreadUtility.IsExist(r.RoomID.ToString())) { ThreadUtility.StartCountdownRemoveRoomThread(r.RoomID.ToString()); } } else { r.Status = 0; r.RoomPeo.RemoveAll(u => u == getdata.Openid); ThreadUtility.StartCountdownRemoveRoomThread(r.RoomID.ToString()); } List <mjuser> listmj = Gongyong.mulist.FindAll(u => u.RoomID == getdata.Roomid); if (listmj.Count == 0) { return; } int fw = listmj.Find(w => w.Openid.Equals(getdata.Openid)).ZS_Fw; var rdatabyone = ReturnJSByOnew.CreateBuilder().SetNickName(Gongyong.userlist.Find(u => u.openid == getdata.Openid).nickname).SetState(getdata.State).SetFw(fw).Build(); byte[] rd = rdatabyone.ToByteArray(); foreach (var item in listmj) { UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid); user.session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5006, rd.Length, requestInfo.MessageNum, rd))); } if (r.RoomPeo.Count == 0) { #region 旧代码 /* * //var senddjs = ReturnDJS.CreateBuilder(); * //CardUser card = Gongyong.FKUser.Find(u => u.roomid == getdata.Roomid); * //foreach (var item in Gongyong.mulist.FindAll(u => u.RoomID == getdata.Roomid)) * //{ * // UserInfo gamer = Gongyong.userlist.Find(u => u.openid == item.Openid); * // var users = Userinfo.CreateBuilder().SetHeadimg(gamer.headimg).SetNickname(gamer.nickname).SetOpenid(gamer.openid).SetSex(int.Parse(gamer.sex)).SetUserFW(item.ZS_Fw).SetUserBean(0).SetUserGold(0).Build(); * // var jsddr = UserAJS.CreateBuilder(); * // jsddr.SetUser(users); * // jsddr.SetZdou(item.zwd_count); * // jsddr.SetZimo(item.zm_count); * // jsddr.SetAndou(item.ad_count); * // jsddr.SetMdou(item.MD_count); * // jsddr.SetDianpao(item.dp_count); * * // switch (item.ZS_Fw) * // { * // case 1: * // jsddr.SetScare(card.dong); * // break; * // case 2: * // jsddr.SetScare(card.nan); * // break; * // case 3: * // jsddr.SetScare(card.xi); * // break; * // case 4: * // jsddr.SetScare(card.bei); * // break; * // default: * // break; * // } * // senddjs.AddUserjs(jsddr); * // senddjs.SetState(2); * * //} * * * * * //Gongyong.mulist.RemoveAll(u => u.RoomID == getdata.Roomid); * //Gongyong.roomlist.RemoveAll(u => u.RoomID == getdata.Roomid); * //var alldata = ReturnAllIdea.CreateBuilder().SetState(1).Build(); * //byte[] bytesss = alldata.ToByteArray(); * //byte[] bsenddjs = senddjs.Build().ToByteArray(); * //foreach (var item in listmj) * //{ * // UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid); * * // user.session.TrySend(new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5007, bytesss.Length, requestInfo.MessageNum, bytesss))); * // user.session.TrySend(new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5014, bsenddjs.Length, requestInfo.MessageNum, bsenddjs))); * // RedisUtility.GetClient().Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, user.openid, user.unionid)); * //} * //RedisUtility.GetClient().Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, r.RoomID.ToString(), "")); */ #endregion if (r.Status == 1) { ThreadUtility.RemoveCountdownRemoveRoomThread(r.RoomID.ToString()); CountdownLogic countdownLogic = new CountdownLogic(); countdownLogic.DisbandTable(new CountdownInfo { roomID = r.RoomID, MessageNum = requestInfo.MessageNum }); } else { ThreadUtility.RemoveCountdownRemoveRoomThread(r.RoomID.ToString()); var alldata = ReturnAllIdea.CreateBuilder().SetState(0).SetMessgaeType(0).Build(); byte[] bytesss = alldata.ToByteArray(); foreach (var item in listmj) { UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid); user.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5007, bytesss.Length, requestInfo.MessageNum, bytesss))); } } Gongyong.roomclear.Remove(r); } } }