public void CallBack(object state) { //倒计时后自动解散牌桌用户体验不好, 应倒计时后自动为玩家选择确定 var countdownInfo = state as CountdownInfo; RoomClear r = Gongyong.roomclear.Find(u => u.RoomID == countdownInfo.roomID); if (r == null) { return; } int messageNum = (GameInformationBase.BASEAGREEMENTNUMBER + 5005); List <SendJsInfo> list = new List <SendJsInfo>(); foreach (var item in r.RoomPeo) { var jsInfo = SendJSIdea.CreateBuilder().SetRoomid(countdownInfo.roomID).SetOpenid(item).SetState(1).Build(); byte[] rbyte = jsInfo.ToByteArray(); list.Add(new SendJsInfo { data = rbyte, OpenID = item }); } foreach (var item in list) { new ClearByUser().ExecuteCommand(Gongyong.userlist.Find(u => u.openid.Equals(item.OpenID)).session, new ProtobufRequestInfo { Body = item.data, Key = messageNum.ToString(), Messagelength = item.data.Length, MessageNum = messageNum, MessageResNum = 0 }); } }
/// <summary> /// 发送同意解散房间 /// </summary> public void SendAgreeMessage() { agreeButton.gameObject.SetActive(false); refuseButton.gameObject.SetActive(false); //SendJSIdea jsidea = SendJSIdea.CreateBuilder() // .SetOpenid(GameInfo.OpenID) // .SetRoomid(GameInfo.room_id) // .SetState(1) // .Build(); //byte[] body = jsidea.ToByteArray(); SendJSIdea jsidea = new SendJSIdea(); jsidea.openid = GameInfo.OpenID; jsidea.roomid = GameInfo.room_id; jsidea.state = 1; byte[] body = ProtobufUtility.GetByteFromProtoBuf(jsidea); byte[] data = CreateHead.CreateMessage(CreateHead.CSXYNUM + 5005, body.Length, 0, body); GameInfo.cs.Send(data); }
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); } } }
public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo) { if (!Gongyong.userlist.Any(w => w.session.SessionID.Equals(session.SessionID))) { session.Logger.Debug("RemoveRoom : 非法连接"); session.Close(); return; } var getdata = SendJS.ParseFrom(requestInfo.Body); mjuser rst = Gongyong.mulist.Find(u => u.Openid == getdata.Openid); int roomid = getdata.Roomid; Room r = Gongyong.roomlist.Find(u => u.RoomID == roomid); if (rst == null) { if (r != null) { if (!Gongyong.mulist.Any(w => w.RoomID == roomid)) { Gongyong.roomlist.Remove(r); RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, r.RoomID.ToString(), "")); } } RedisUtility.Remove(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, getdata.Openid, getdata.Unionid)); return; } if (r == null) { return; } int fw = Gongyong.mulist.Find(u => u.Openid == getdata.Openid).ZS_Fw; session.Logger.Debug(Name + "|" + getdata.ToString()); string nickname = Gongyong.userlist.Find(u => u.openid == getdata.Openid).nickname; var disbandedRoomInfo = RedisUtility.Get <DisbandedRoomInfo>((RedisUtility.GetKey(GameInformationBase.COMMUNITYDISBANDED, getdata.Openid, getdata.Unionid))); List <mjuser> listuser = Gongyong.mulist.FindAll(u => u.RoomID == roomid); ///判断游戏是否开始(未开始直接解散,开始则发送消息) if (r.startgame != 1 && rst.IsHomeowner) { new UserExitLogic().DissolutionRoom(r, requestInfo.MessageNum, 1); } else if (disbandedRoomInfo != null && (DateTime.Now - disbandedRoomInfo.Time).TotalSeconds < 5)// { var data = ReturnDisbandedFailure.CreateBuilder().SetStatus(1).Build().ToByteArray(); session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5010, data.Length, requestInfo.MessageNum, data))); } else { if (disbandedRoomInfo == null) { var disbandedRoom = new DisbandedRoomInfo { OpenID = getdata.Openid, RoomID = roomid, Time = DateTime.Now }; RedisUtility.Set(RedisUtility.GetKey(GameInformationBase.COMMUNITYDISBANDED, getdata.Openid, getdata.Unionid), disbandedRoom, 1); } if (!Gongyong.roomclear.Any(w => w.RoomID == roomid)) { RoomClear rc = new RoomClear() { Status = 1, RoomID = roomid }; var Rdata = ReturnJSMsg.CreateBuilder().SetFw(fw).SetNickName(nickname); byte[] Rtbyte = Rdata.Build().ToByteArray(); foreach (var item in listuser) { if (item.Openid != getdata.Openid) { rc.RoomPeo.Add(item.Openid); } UserInfo user = Gongyong.userlist.Find(u => u.openid == item.Openid); user.session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5004, Rtbyte.Length, requestInfo.MessageNum, Rtbyte))); } Gongyong.roomclear.Add(rc); ThreadUtility.AddCountdownRemoveRoomThread(roomid.ToString());//当有用户申请解散房间,倒计时开始。 } else { var data = SendJSIdea.CreateBuilder().SetOpenid(getdata.Openid).SetRoomid(roomid).SetState(1).Build().ToByteArray(); // new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 5005, data.Length, requestInfo.MessageNum, data)); new ClearByUser().ExecuteCommand(session, new ProtobufRequestInfo { Body = data, Key = (GameInformationBase.BASEAGREEMENTNUMBER + 5005).ToString(), Messagelength = data.Length, MessageNum = GameInformationBase.BASEAGREEMENTNUMBER + 5005, MessageResNum = 0 }); } // ThreadUtility.StartCountdownRemoveRoomThread(roomid.ToString()); } }