protected void C2L_CreateRoom(IIncommingMessage reader) { var msg = reader.Parse <Msg_C2L_CreateRoom>(); var user = reader.Peer.GetExtension <User>(); if (user?.Room != null) { reader.Respond(1, EResponseStatus.Failed); return; } Debug.Log("AddRoom " + msg); var room = AddRoom(user, msg.Name, msg.MapId, msg.MaxPlayerCount); reader.Respond(EMsgSC.L2C_CreateRoomResult, new Msg_L2C_CreateRoom() { Info = room.Info, PlayerInfos = room.RoomPlayerInfos }); //TODO 缓存信息 批量发送 if (_gameType2Rooms.TryGetValue(user.GameType, out var rooms)) { var bytes = new Msg_L2C_RoomInfoUpdate() { AddInfo = new RoomInfo[] { room.Info } }.ToBytes(); //var bMsg = MessageHelper.Create((short) EMsgSC.L2C_RoomInfoUpdate,); foreach (var tRoom in rooms) { tRoom.BorderMessage((short)EMsgSC.L2C_RoomInfoUpdate, bytes); } } }
protected void C2L_LeaveRoom(IIncommingMessage reader) { var msg = reader.Parse <Msg_C2L_LeaveRoom>(); var user = reader.Peer.GetExtension <User>(); if (user?.Room == null) { return; } var room = user.Room; room.RemoveUser(user); if (room.IsEmpty) { var roomId = user.Room.RoomId; //TODO 缓存 if (_gameType2Rooms.TryGetValue(user.GameType, out var rooms)) { //var bMsg = MessageHelper.Create((short) EMsgSC.L2C_RoomInfoUpdate, // new Msg_L2C_RoomInfoUpdate() { // DeleteInfo = new[] {roomId} // }.ToBytes()); //foreach (var tRoom in rooms) { // tRoom.BorderMessage(bMsg); //} var bytes = new Msg_L2C_RoomInfoUpdate() { DeleteInfo = new[] { roomId } }.ToBytes(); //var bMsg = MessageHelper.Create((short) EMsgSC.L2C_RoomInfoUpdate,); foreach (var tRoom in rooms) { tRoom.BorderMessage((short)EMsgSC.L2C_RoomInfoUpdate, bytes); } } RemoveRoom(user.Room); reader.Respond((int)ERoomOperatorResult.Succ, EResponseStatus.Success); user.Room = null; return; } if (room.Owner == user) { room.Owner = room.Users[0]; } user.Room = null; reader.Respond((int)ERoomOperatorResult.Succ, EResponseStatus.Success); room.BorderMessage((short)EMsgSC.L2C_LeaveRoom, new Msg_L2C_LeaveRoom() { UserId = user.UserId }); }