Files
PemukulPaku/HttpServer/Controllers/DispatchController.cs
2023-05-24 17:18:36 +07:00

298 lines
13 KiB
C#

using HttpServer.Models;
using Newtonsoft.Json;
using Common;
using System.Text.RegularExpressions;
namespace HttpServer.Controllers
{
public class DispatchController
{
public static void AddHandlers(WebApplication app)
{
app.Map("/query_dispatch", (ctx) =>
{
QueryDispatch rsp = new()
{
Retcode = 0,
RegionList = new Region[] {
new Region() {
Retcode = 0,
DispatchUrl = $"http://{Global.config.Gameserver.Host}/query_gateway",
Name = Global.config.Gameserver.RegionName,
Title = "",
Ext = GetExt(ctx.Request.Query["version"].ToString())
}
}
};
return ctx.Response.WriteAsync(JsonConvert.SerializeObject(rsp));
});
app.Map("/query_gateway", (ctx) =>
{
string Version = ctx.Request.Query["version"].ToString();
Gameserver Gameserver = new()
{
Ip = Global.config.Gameserver.Host,
Port = Global.config.Gameserver.Port
};
QueryGateway rsp = new()
{
Retcode = 0,
Msg = "",
RegionName = Global.config.Gameserver.RegionName,
AccountUrl = $"http://{Global.config.Gameserver.Host}/account",
AccountUrlBackup = $"http://{Global.config.Gameserver.Host}/account",
AssetBundleUrlList = GetAssetBundleUrlList(Version),
ExAudioAndVideoUrlList = GetExAudioAndVideoUrlList(Version),
ExResourceUrlList = GetExResourceUrlList(Version),
Ext = GetExt(Version),
Gameserver = Gameserver,
Gateway = Gameserver,
IsDataReady = true,
OaserverUrl = $"http://{Global.config.Gameserver.Host}/oaserver",
ServerCurTime = Global.GetUnixInSeconds(),
ServerCurTimezone = 8,
ServerExt = new ServerExt()
{
CdkeyUrl = $"http://{Global.config.Gameserver.Host}/common",
MihoyoSdkEnv = "2"
}
};
return ctx.Response.WriteAsync(JsonConvert.SerializeObject(rsp));
});
}
public static Ext GetExt(string version)
{
return new Ext()
{
AiUseAssetBoundle = "1",
ApmLogLevel = "2",
ApmSwitch = "1",
ApmSwitchCrash = "1",
DataUseAssetBoundle = "1",
EnableWatermark = "1",
ExAudioAndVideoUrlList = GetExAudioAndVideoUrlList(version),
ExResPrePublish = "0",
ExResUseHttp = "0",
ExResourceUrlList = GetExResourceUrlList(version),
ForbidRecharge = "1",
IsChecksumOff = "1",
OfflineReportSwitch = "1",
ResUseAssetBoundle = "1",
ShowVersionText = "0",
UpdateStreamingAsb = "1",
UseMultyCdn = "1",
ApmLogDest = "2",
ApmSwitchGameLog = "1",
BlockErrorDialog = "1",
ElevatorModelPath = "GameEntry/EVA/StartLoading_Model",
ExResBuffSize = "10485760",
IsXxxx = "1",
MtpSwitch = "0",
NetworkFeedbackEnable = "0",
ShowBulletinButton = "0",
ShowBulletinEmptyDialogBg = "0"
};
}
public static string[] GetAssetBundleUrlList(string version)
{
Regex regex = new Regex(@"^(.*?)_(os|gf|global)_(.*?)$");
Match matches = regex.Match(version);
if (matches.Success)
{
string type = matches.Groups[2].Value; // get the second group (os or gf)
switch (type)
{
case "os":
return Global.config.UseLocalCache ? new string[]
{
$"http://{Global.config.Gameserver.Host}/asset_bundle/overseas01/1.1",
$"http://{Global.config.Gameserver.Host}/asset_bundle/overseas01/1.1"
} : new string[]
{
"https://hk-bundle-os-mihayo.akamaized.net/asset_bundle/overseas01/1.1",
"https://bundle-aliyun-os.honkaiimpact3.com/asset_bundle/overseas01/1.1"
};
case "gf":
if (version.Contains("beta"))
{
return Global.config.UseLocalCache ? new string[]
{
$"https://{Global.config.Gameserver.Host}/asset_bundle/beta_release/1.0",
$"https://{Global.config.Gameserver.Host}/asset_bundle/beta_release/1.0"
} : new string[]
{
"https://bh3rd-beta-qcloud.bh3.com/asset_bundle/beta_release/1.0",
"https://bh3rd-beta.bh3.com/asset_bundle/beta_release/1.0"
};
}
return Global.config.UseLocalCache ? new string[]
{
$"https://{Global.config.Gameserver.Host}/asset_bundle/android01/1.0",
$"https://{Global.config.Gameserver.Host}/asset_bundle/android01/1.0"
} : new string[]
{
"https://bundle-qcloud.bh3.com/asset_bundle/android01/1.0",
"https://bundle.bh3.com/asset_bundle/android01/1.0"
};
case "global":
return Global.config.UseLocalCache ? new string[]
{
$"https://{Global.config.Gameserver.Host}/asset_bundle/usa01/1.1",
$"https://{Global.config.Gameserver.Host}/asset_bundle/usa01/1.1"
} : new string[]
{
"http://hk-bundle-west-mihayo.akamaized.net/asset_bundle/usa01/1.1",
"http://bundle-aliyun-usa.honkaiimpact3.com/asset_bundle/usa01/1.1"
};
default:
return Global.config.UseLocalCache ? new string[]
{
$"http://{Global.config.Gameserver.Host}/asset_bundle/overseas01/1.1",
$"http://{Global.config.Gameserver.Host}/asset_bundle/overseas01/1.1"
} : new string[]
{
"https://hk-bundle-os-mihayo.akamaized.net/asset_bundle/overseas01/1.1",
"https://bundle-aliyun-os.honkaiimpact3.com/asset_bundle/overseas01/1.1"
};
}
}
else
{
return Global.config.UseLocalCache ? new string[]
{
$"http://{Global.config.Gameserver.Host}/asset_bundle/overseas01/1.1",
$"http://{Global.config.Gameserver.Host}/asset_bundle/overseas01/1.1"
} : new string[]
{
"https://hk-bundle-os-mihayo.akamaized.net/asset_bundle/overseas01/1.1",
"https://bundle-aliyun-os.honkaiimpact3.com/asset_bundle/overseas01/1.1"
};
}
}
public static string[] GetExAudioAndVideoUrlList(string version)
{
Regex regex = new(@"^(.*?)_(os|gf|global)_(.*?)$");
Match matches = regex.Match(version);
if (matches.Success)
{
string type = matches.Groups[2].Value; // get the second group (os or gf)
switch (type)
{
case "os":
return new string[] { };
case "gf":
if (version.Contains("beta"))
{
return Global.config.UseLocalCache ? new string[]
{
$"{Global.config.Gameserver.Host}/tmp/CGAudio",
$"{Global.config.Gameserver.Host}/tmp/CGAudio"
} : new string[]
{
"bh3rd-beta-qcloud.bh3.com/tmp/CGAudio",
"bh3rd-beta.bh3.com/tmp/CGAudio"
};
}
return new string[] { };
case "global":
return new string[] { };
default:
return new string[] { };
}
}
else
{
return new string[] { };
}
}
public static string[] GetExResourceUrlList(string version)
{
Regex regex = new(@"^(.*?)_(os|gf|global)_(.*?)$");
Match matches = regex.Match(version);
if (matches.Success)
{
string type = matches.Groups[2].Value; // get the second group (os or gf)
switch (type)
{
case "os":
return Global.config.UseLocalCache ? new string[]
{
$"{Global.config.Gameserver.Host}/com.miHoYo.bh3oversea",
$"{Global.config.Gameserver.Host}/com.miHoYo.bh3oversea"
} : new string[]
{
"hk-bigfile-os-mihayo.akamaized.net/com.miHoYo.bh3oversea",
"bigfile-aliyun-os.honkaiimpact3.com/com.miHoYo.bh3oversea"
};
case "gf":
if (version.Contains("beta"))
{
return Global.config.UseLocalCache ? new string[]
{
$"{Global.config.Gameserver.Host}/tmp/beta",
$"{Global.config.Gameserver.Host}/tmp/beta"
} : new string[]
{
"bh3rd-beta-qcloud.bh3.com/tmp/beta",
"bh3rd-beta.bh3.com/tmp/beta"
};
}
return Global.config.UseLocalCache ? new string[]
{
$"{Global.config.Gameserver.Host}/tmp/Original",
$"{Global.config.Gameserver.Host}/tmp/Original"
} : new string[]
{
"bundle-qcloud.bh3.com/tmp/Original",
"bundle.bh3.com/tmp/Original"
};
case "global":
return Global.config.UseLocalCache ? new string[]
{
$"{Global.config.Gameserver.Host}/tmp/com.miHoYo.bh3global",
$"{Global.config.Gameserver.Host}/tmp/com.miHoYo.bh3global"
} : new string[]
{
"hk-bundle-west-mihayo.akamaized.net/tmp/com.miHoYo.bh3global",
"bigfile-aliyun-usa.honkaiimpact3.com/tmp/com.miHoYo.bh3global"
};
default:
return Global.config.UseLocalCache ? new string[]
{
$"{Global.config.Gameserver.Host}/com.miHoYo.bh3oversea",
$"{Global.config.Gameserver.Host}/com.miHoYo.bh3oversea"
} : new string[]
{
"hk-bigfile-os-mihayo.akamaized.net/com.miHoYo.bh3oversea",
"bigfile-aliyun-os.honkaiimpact3.com/com.miHoYo.bh3oversea"
};
}
}
else
{
return Global.config.UseLocalCache ? new string[]
{
$"{Global.config.Gameserver.Host}/com.miHoYo.bh3oversea",
$"{Global.config.Gameserver.Host}/com.miHoYo.bh3oversea"
} : new string[]
{
"hk-bigfile-os-mihayo.akamaized.net/com.miHoYo.bh3oversea",
"bigfile-aliyun-os.honkaiimpact3.com/com.miHoYo.bh3oversea"
};
}
}
}
}