public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo) { var gameOperation = SendGameOperation.ParseFrom(requestInfo.Body); RedisLoginModel olduser = RedisUtility.Get <RedisLoginModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERLIST, gameOperation.Openid, gameOperation.Unionid)); if (olduser == null) { return; } int GroupID = gameOperation.HasGroupID ? gameOperation.GroupID : 0; var serverGameOperation = ReturnGameOperation.CreateBuilder(); UserInfo user = Gongyong.userlist.Find(u => u.openid == olduser.Openid); switch (gameOperation.Operation) { //1創建房間/2加入房間 case 1: //if (ISUserInGruop(gameOperation)) if (gameOperation.GroupID != 0) { GroupInfoDAL groupInfoDAL = new GroupInfoDAL(); var creategroupuderid = groupInfoDAL.GetUserIDByGuoupID(GroupID); var roomcardCount = RoomCardUtility.GetRoomCard(creategroupuderid); if (roomcardCount - GameInformationBase.createRoomCard < 0) { var data = serverGameOperation.SetUnionid(gameOperation.Unionid).SetOpenid(gameOperation.Openid).SetStatus(-3).Build().ToByteArray(); session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1021, data.Length, requestInfo.MessageNum, data))); return; } else { RedisUtility.GetServerIP(GameInformationBase.DEFAULTGAMESERVERNAME, requestInfo.MessageNum, session, 1, gameOperation.Openid, gameOperation.Unionid); } var reslut = RedisUtility.GetServerIP(GameInformationBase.DEFAULTGAMESERVERNAME, requestInfo.MessageNum, session, 1, gameOperation.Openid, gameOperation.Unionid); if (reslut == true) { //根据groupid来查找所有在线的圈子session var groupList = Gongyong.userlist.FindAll(w => { return(w.GroupID.Contains(GroupID) && w.session != session); }); for (var i = 0; i < groupList.Count; i++) { Console.WriteLine("get : " + groupList[i].nickname + " , ", groupList[i]); } ////向日志里面添加朋友圈耗卡信息 //GroupInfoDAL groupInfoDAL = new GroupInfoDAL(); //var userInfo = Gongyong.userlist.Find(w => { return w.session.Equals(session); }); //var listRecord = groupInfoDAL.AddCreateRoomRecord(userInfo.UserID, GroupID,); } } else //不是在圈子里进行创建房间的 { //检测是否满足开房的条件 var roomcardCount = RoomCardUtility.GetRoomCard(user.UserID); if (roomcardCount - GameInformationBase.createRoomCard < 0) { var data = serverGameOperation.SetUnionid(gameOperation.Unionid).SetOpenid(gameOperation.Openid).SetStatus(-1).Build().ToByteArray(); session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1021, data.Length, requestInfo.MessageNum, data))); return; } else { RedisUtility.GetServerIP(GameInformationBase.DEFAULTGAMESERVERNAME, requestInfo.MessageNum, session, 1, gameOperation.Openid, gameOperation.Unionid); } } break; case 2: if (!gameOperation.HasRoomID) { return; } var roomInfo = RedisUtility.Get <RedisGameRoomInfo>(RedisUtility.GetKey(GameInformationBase.COMMUNITYROOMINFO, gameOperation.RoomID, string.Empty)); var ddzRoomInfo = RedisUtility.Get <RedisDDZGameRoomInfo>(RedisUtility.GetKey(GameInformationBase.COMMUNITYDDZROOMINFO, gameOperation.RoomID, string.Empty)); var status = 0; if (roomInfo == null && ddzRoomInfo == null) { status = 3; } else if ((roomInfo != null && roomInfo.room.listOpenid.Count >= roomInfo.room.room_peo) || (ddzRoomInfo != null && ddzRoomInfo.room.listOpenid.Count >= 3)) { status = 2; } else { if (ISUserInGruop(gameOperation)) { status = 1; //1:加入成功 RedisUtility.GetServerIP(roomInfo.ServerName, requestInfo.MessageNum, session, 1, gameOperation.Openid, gameOperation.Unionid, false, 0, status, roomInfo == null ? 1 : 0); } else //不是圈内成员 { var data = serverGameOperation.SetUnionid(gameOperation.Unionid).SetOpenid(gameOperation.Openid).SetStatus(-2).Build().ToByteArray(); session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 1021, data.Length, requestInfo.MessageNum, data))); } } if (status != 1) { var data = ReturnRoomAdd.CreateBuilder().SetStart(status).Build().ToByteArray(); session.Send(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7090, data.Length, requestInfo.MessageNum, data))); } break; } }
/// <summary> /// 加入房间判断,先加入房间 /// </summary> /// <param name="session"></param> /// <param name="requestInfo"></param> public void ExecuteCommand(GameSession session, ProtobufRequestInfo requestInfo) { if (!Gongyong.userlist.Any(w => w.session.SessionID.Equals(session.SessionID))) { session.Logger.Debug("AddRoomOne : 非法连接"); session.Close(); return; } var getdata = SendAddRoomOne.ParseFrom(requestInfo.Body); var senddata = ReturnRoomAdd.CreateBuilder(); UserInfo user = Gongyong.userlist.Find(u => u.openid == getdata.Openid); if (user == null) { return; } Room r = Gongyong.roomlist.Find(u => u.RoomID == getdata.RoomID); session.Logger.Debug("申请加入房间" + getdata.Openid); if (r == null) { senddata.SetStart(3);//3:房间不存在 } //else if (r.listOpenid.Any(w => w.Equals(getdata.Openid))) //{ // senddata.SetStart(1);//1:加入成功 如果本来就在房间内则不占一个位置 //} else if (r.listOpenid.Count + 1 == r.room_peo) { senddata.SetStart(2);//2:人数已满 } else { senddata.SetStart(1);//1:加入成功 r.listOpenid.Add(getdata.Openid); try { //将牌桌信息保存 RedisUtility.Set <RedisGameModel>(RedisUtility.GetKey(GameInformationBase.COMMUNITYUSERGAME, user.openid, user.unionid), new RedisGameModel { RoomID = r.RoomID, ServerName = GameInformationBase.serverName, Openid = user.openid, Unionid = user.unionid }); } catch (Exception ex)//用户加入房间时有可能redis 异常导致服务器内加入成功但是消息并未发送。 { session.Logger.Error(ex); r.listOpenid.Remove(getdata.Openid); return; } //session.Logger.Debug(getdata.Openid + " start : " + senddata.Start); //byte[] arr = senddata.Build().ToByteArray(); //session.TrySend(new ArraySegment<byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7090, arr.Length, requestInfo.MessageNum, arr))); } session.Logger.Debug(getdata.Openid + " start : " + senddata.Start); byte[] arr = senddata.Build().ToByteArray(); session.TrySend(new ArraySegment <byte>(CreateHead.CreateMessage(GameInformationBase.BASEAGREEMENTNUMBER + 7090, arr.Length, requestInfo.MessageNum, arr))); }