private static void UPLOAD_MAP_REPLY(byte[] bytes)
    {
        UploadMapReply input = UploadMapReply.Parser.ParseFrom(bytes);

        if (!input.Ret)
        {
            string msg = "上传地图失败!";
            UIManager.Instance.SystemTips(msg, PanelSystemTips.MessageType.Error);
            GameRoomManager.Instance.Log("MSG: UPLOAD_MAP_REPLY Error - " + msg);
            return;
        }

        if (input.IsLastPackage)
        {
            GameRoomManager.Instance.Log($"MSG: UPLOAD_MAP_REPLY OK - 上传地图成功!RoomID:{input.RoomId}");
            // 发出EnterRoom消息,进入房间
            EnterRoom output = new EnterRoom()
            {
                RoomId = input.RoomId,
            };
            GameRoomManager.Instance.SendMsg(ROOM.EnterRoom, output.ToByteArray());
            GameRoomManager.Instance.Log($"MSG: UPLOAD_MAP_REPLY OK - 申请进入战场:{input.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());
    }