public void CreateJoinRoom(EnterRoomData roomData) { Debug.Log("GameRoomManager CreateJoinRoom() Begin..."); if (roomData.IsCreatingRoom) {// 创建房间流程 Log($"MSG: CreateJoinRoom - 创建房间:{roomData.RoomName}"); // 把地图数据上传到房间服务器保存。后面的和加入房间一样了。 BinaryReader reader = HexmapHelper.BeginLoadBuffer(roomData.RoomName); if (reader != null) { const int CHUNK_SIZE = 900; byte[] bytes = new byte[CHUNK_SIZE]; int size = CHUNK_SIZE; bool isFileEnd = false; int index = 0; while (!isFileEnd) { if (!HexmapHelper.LoadBuffer(reader, out bytes, ref size, ref isFileEnd)) { Log($"Load Buffer Failed - {roomData.RoomName}"); } UploadMap output = new UploadMap() { RoomName = roomData.RoomName, MaxPlayerCount = roomData.MaxPlayerCount, MapData = ByteString.CopyFrom(bytes), PackageIndex = index++, IsLastPackage = isFileEnd, }; SendMsg(ROOM.UploadMap, output.ToByteArray()); } Log($"MSG: 发送地图数据 - 地图名:{roomData.RoomName} - Total Size:{reader.BaseStream.Length}"); HexmapHelper.EndLoadBuffer(ref reader); } } else {// 直接申请进入房间 // 发出EnterRoom消息,进入房间 EnterRoom output = new EnterRoom() { RoomId = roomData.RoomId, }; SendMsg(ROOM.EnterRoom, output.ToByteArray()); Log($"MSG: CreateJoinRoom - 申请进入房间:{roomData.RoomName}"); } }
private static void UPLOAD_MAP(byte[] bytes) { // 这个消息会有好多组 UploadMap input = UploadMap.Parser.ParseFrom(bytes); if (input.PackageIndex == 0) { // 第一条此类消息 mapDataBuffers.Clear(); ServerRoomManager.Instance.Log($"MSG:UPLOAD_MAP - Begin upload map data! MapName:{input.RoomName}"); // 开始上传地图数据!地图名 } mapDataBuffers.Add(input.MapData.ToByteArray()); bool ret = true; long roomId = 0; if (input.IsLastPackage) {// 最后一条此类消息了 // 生成唯一ID roomId = Utils.GuidToLongId(); int totalSize = 0; foreach (var package in mapDataBuffers) { totalSize += package.Length; } byte[] totalMapData = new byte[totalSize]; int position = 0; foreach (var package in mapDataBuffers) { Array.Copy(package, 0, totalMapData, position, package.Length); position += package.Length; } PlayerInfo pi = ServerRoomManager.Instance.GetPlayer(_args); if (pi == null) { ServerRoomManager.Instance.Log($"MSG:UPLOAD_MAP Error - Save map data failed! Creator not found! MapName:{input.RoomName}"); // 保存地图数据失败!创建者没有找到!地图名 ret = false; } else { ret = true; string tableName = $"MAP:{roomId}"; ServerRoomManager.Instance.Redis.CSRedis.HSet(tableName, "Creator", pi.Enter.TokenId); ServerRoomManager.Instance.Redis.CSRedis.HSet(tableName, "RoomId", roomId); ServerRoomManager.Instance.Redis.CSRedis.HSet(tableName, "RoomName", input.RoomName); ServerRoomManager.Instance.Redis.CSRedis.HSet(tableName, "MaxPlayerCount", input.MaxPlayerCount); ServerRoomManager.Instance.Redis.CSRedis.HSet(tableName, "MapData", totalMapData); ServerRoomManager.Instance.Redis.CSRedis.HSet(tableName, "MapDataSize", totalSize); ServerRoomManager.Instance.Redis.CSRedis.HSet(tableName, "CreateTime", DateTime.Now); ServerRoomManager.Instance.Log($"MSG: UPLOAD_MAP OK - Upload map data and save to redis succeeded! MapName:{input.RoomName} - Total Size:{totalSize}"); // 上传地图数据,并保存到Redis成功!地图名 } } UploadMapReply output = new UploadMapReply() { Ret = ret, IsLastPackage = input.IsLastPackage, RoomId = roomId, RoomName = input.RoomName, }; ServerRoomManager.Instance.SendMsg(_args, ROOM_REPLY.UploadMapReply, output.ToByteArray()); }