protected override void Run(Session session, C2G_DDZPrepare_Req message, Action <G2C_DDZPrepare_Res> reply) { G2C_DDZPrepare_Res response = new G2C_DDZPrepare_Res(); try { if (!GateHelper.SingSession(session)) { response.Error = ErrorCode.ERR_SessionError; response.Message = " 当前的session已经断开 !!!"; reply(response); return; } int restul = RoomHelper.Prepare(message.GameId, message.AreaId, message.RoomId, message.UserId); if (restul == -1) { response.Error = ErrorCode.ERR_DDZPrepareError; response.Message = " 准备失败 !!!"; reply(response); return; } reply(response); } catch (Exception e) { ReplyError(response, e, reply); } }
protected override void Run(Session session, C2G_GetRoomInfo_Req message, Action <G2C_GetRoomInfo_Res> reply) { G2C_GetRoomInfo_Res response = new G2C_GetRoomInfo_Res(); try { if (!GateHelper.SingSession(session)) { response.Error = ErrorCode.ERR_SessionError; response.Message = " 当前的session已经断开 !!!"; reply(response); return; } response.RoomData = (RoomData)RoomHelper.GetRoomInfo(message.GameId, message.AreaId, message.UserId, message.RoomId); if (response.RoomData == null) { response.Error = ErrorCode.ERR_GetRoomInfoError; response.Message = " 获取房间信息失败 !!!"; reply(response); return; } reply(response); } catch (Exception e) { ReplyError(response, e, reply); } }
protected override void Run(Session session, C2G_GetRoomList_Req message, Action <G2C_GetRoomLis_Res> reply) { G2C_GetRoomLis_Res response = new G2C_GetRoomLis_Res(); try { List <RoomListInfo> roomList = RoomHelper.GetRoomList(message.GameId, message.AreaId); if (roomList == null || roomList.Count < 1) { response.Error = ErrorCode.ERR_GetRoomListError; response.Message = "获取房间列表失败 !!!"; reply(response); } response.RoomList = new RepeatedField <RoomListInfo>(); roomList.ForEach(u => response.RoomList.Add(u)); reply(response); } catch (Exception e) { ReplyError(response, e, reply); } }
protected override async void Run(Session session, MH2MP_CreateRoom_Req message, Action <MP2MH_CreateRoom_Ack> reply) { MP2MH_CreateRoom_Ack response = new MP2MH_CreateRoom_Ack(); try { //创建房间 Room room = ComponentFactory.Create <Room>(); room.AddComponent <DeckComponent>(); room.AddComponent <DeskCardsCacheComponent>(); room.AddComponent <OrderControllerComponent>(); room.AddComponent <GameControllerComponent, RoomConfig>(RoomHelper.GetConfig(RoomLevel.Lv100)); await room.AddComponent <MailBoxComponent>().AddLocation(); Game.Scene.GetComponent <RoomComponent>().Add(room); Log.Info($"创建房间{room.InstanceId}"); response.RoomID = room.InstanceId; reply(response); } catch (Exception e) { ReplyError(response, e, reply); } }
protected async override void Run(Session session, C2G_QuitRoom_Req message, Action <G2C_QuitRoom_Res> reply) { G2C_QuitRoom_Res response = new G2C_QuitRoom_Res(); try { if (!GateHelper.SingSession(session)) { response.Error = ErrorCode.ERR_SessionError; response.Message = " 当前的session已经断开 !!!"; reply(response); return; } var Result = await RoomHelper.QuitRoom(message.GameId, message.AreaId, message.UserId, message.RoomId); if (Result != "0" && Result != "1") { response.Error = ErrorCode.ERR_QuitRoomError; response.Message = Result; reply(response); return; } reply(response); } catch (Exception e) { ReplyError(response, e, reply); } }
protected override void Run(Session session, C2G_DDZPlayCard_Req message, Action <G2C_DDZPlayCard_Res> reply) { G2C_DDZPlayCard_Res response = new G2C_DDZPlayCard_Res(); try { if (!GateHelper.SingSession(session)) { response.Error = ErrorCode.ERR_SessionError; response.Message = " 当前的session已经断开 !!!"; reply(response); return; } response = (G2C_DDZPlayCard_Res)RoomHelper.PlayCard(message.GameId, message.AreaId, message.RoomId, message); response.UserId = message.UserId; reply(response); } catch (Exception e) { ReplyError(response, e, reply); } }
protected override void Run(Session session, G2G_CreateRoom_Req message, Action <G2G_CreateRoom_Res> reply) { G2G_CreateRoom_Res response = new G2G_CreateRoom_Res(); try { RoomHelper.CreateRoom(); reply(response); } catch (Exception e) { ReplyError(response, e, reply); } }
protected async override void Run(Session session, C2G_ChangerRoom_Req message, Action <G2C_ChangerRoom_Res> reply) { G2C_ChangerRoom_Res response = new G2C_ChangerRoom_Res(); try { if (!GateHelper.SingSession(session)) { response.Error = ErrorCode.ERR_SessionError; response.Message = " 当前的session已经断开 !!!"; reply(response); return; } int[] restul = RoomHelper.ChangerRoom(message.GameId, message.AreaId, message.RoomId, session.Id); if (restul[0] == -1) { response.Error = ErrorCode.ERR_ChangerRoomError; response.Message = "换桌失败"; reply(response); return; } var myLastRoomInfo = Game.Scene.GetComponent <PlayerManagerComponent>().Get(message.UserId).GetComponent <MyLastJionRoom>().MyLastJionRoomList; if (myLastRoomInfo.Count == 0) { myLastRoomInfo.Add(new MyLastJionRoomData()); } myLastRoomInfo.First().GameId = message.GameId; myLastRoomInfo.First().AreaId = message.AreaId; myLastRoomInfo.First().RoomId = restul[0]; response.GameId = message.GameId; response.AreaId = message.AreaId; response.RoomId = restul[0]; response.Index = restul[1]; reply(response); } catch (Exception e) { ReplyError(response, e, reply); } }
protected override async void Run(Session session, C2G_StartMatch_Req message, Action <G2C_StartMatch_Ack> reply) { G2C_StartMatch_Ack response = new G2C_StartMatch_Ack(); try { //验证Session if (!GateHelper.SignSession(session)) { response.Error = ErrorCode.ERR_SignError; reply(response); return; } User user = session.GetComponent <SessionUserComponent>().User; //验证玩家是否符合进入房间要求,默认为100底分局 RoomConfig roomConfig = RoomHelper.GetConfig(RoomLevel.Lv100); UserInfo userInfo = await Game.Scene.GetComponent <DBProxyComponent>().Query <UserInfo>(user.UserID, false); if (userInfo.Money < roomConfig.MinThreshold) { response.Error = ErrorCode.ERR_UserMoneyLessError; reply(response); return; } //这里先发送响应,让客户端收到后切换房间界面,否则可能会出现重连消息在切换到房间界面之前发送导致重连异常 reply(response); //向匹配服务器发送匹配请求 StartConfigComponent config = Game.Scene.GetComponent <StartConfigComponent>(); IPEndPoint matchIPEndPoint = config.MatchConfig.GetComponent <InnerConfig>().IPEndPoint; Session matchSession = Game.Scene.GetComponent <NetInnerComponent>().Get(matchIPEndPoint); M2G_PlayerEnterMatch_Ack m2G_PlayerEnterMatch_Ack = await matchSession.Call(new G2M_PlayerEnterMatch_Req() { PlayerID = user.InstanceId, UserID = user.UserID, SessionID = session.InstanceId, }) as M2G_PlayerEnterMatch_Ack; user.IsMatching = true; } catch (Exception e) { ReplyError(response, e, reply); } }
protected async override void Run(Session session, C2G_JionRoom_Req message, Action <G2C_JionRoom_Res> reply) { G2C_JionRoom_Res response = new G2C_JionRoom_Res(); try { if (!GateHelper.SingSession(session)) { response.Error = ErrorCode.ERR_SessionError; response.Message = " 当前的session已经断开 !!!"; reply(response); return; } int RoomId = RoomHelper.JionRoom(message.GameId, message.AreaId, message.UserId, session.Id, message.RoomId, out string errMsg); if (RoomId == -1) { response.Error = ErrorCode.ERR_JionRoomError; response.Message = errMsg; reply(response); return; } var myLastRoomInfo = Game.Scene.GetComponent <PlayerManagerComponent>().Get(message.UserId).GetComponent <MyLastJionRoom>().MyLastJionRoomList; myLastRoomInfo.Clear(); MyLastJionRoomData myLast = new MyLastJionRoomData() { GameId = message.GameId, AreaId = message.AreaId, RoomId = RoomId }; myLastRoomInfo.Add(myLast); response.RoomId = RoomId; reply(response); } catch (Exception e) { ReplyError(response, e, reply); } }
public async override void Destroy(SessionUserComponent self) { DBProxyComponent dbProxy = Game.Scene.GetComponent <DBProxyComponent>(); try { StartConfigComponent config = Game.Scene.GetComponent <StartConfigComponent>(); IPEndPoint realmIPEndPoint = config.RealmConfig.GetComponent <InnerConfig>().IPEndPoint; Session realmSession = Game.Scene.GetComponent <NetInnerComponent>().Get(realmIPEndPoint); await realmSession.Call(new G2R_PlayerOffline_Req() { UserID = self.userInfo.Id }); var myLastRoomInfo = self.userInfo.GetComponent <MyLastJionRoom>().MyLastJionRoomList; if (myLastRoomInfo.Count > 0) { RoomHelper.QuitRoom(myLastRoomInfo.First().GameId, myLastRoomInfo.First().AreaId, self.userInfo.Id, myLastRoomInfo.First().RoomId); } self.userInfo.IsOnline = false; DateTime endTime = DateTime.Now; await dbProxy.Save(Game.Scene.GetComponent <PlayerManagerComponent>().Get(self.userInfo.Id)); Game.Scene.GetComponent <PlayerManagerComponent>()?.Remove(self.userInfo.Id); self.userInfo.Dispose(); self.userInfo = null; Game.Scene.GetComponent <PingComponent>().RemoveSession(self.sessionId); } catch (System.Exception e) { Log.Trace(e.ToString()); } }