Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
ziqian zhang
Grasscutter
Commits
3adf0d44
Commit
3adf0d44
authored
May 13, 2022
by
KingRainbow44
Browse files
Refactor dispatch (now called HTTP) server (pt. 2)
parent
840f4706
Changes
25
Show whitespace changes
Inline
Side-by-side
src/main/java/emu/grasscutter/server/http/handlers/GenericHandler.java
View file @
3adf0d44
package
emu.grasscutter.server.http.handlers
;
import
emu.grasscutter.server.dispatch.DispatchHttpJsonHandler
;
import
emu.grasscutter.GameConstants
;
import
emu.grasscutter.Grasscutter
;
import
emu.grasscutter.server.http.objects.HttpJsonResponse
;
import
emu.grasscutter.server.http.Router
;
import
express.Express
;
import
express.http.Request
;
import
express.http.Response
;
import
io.javalin.Javalin
;
/**
...
...
@@ -11,37 +15,41 @@ import io.javalin.Javalin;
public
final
class
GenericHandler
implements
Router
{
@Override
public
void
applyRoutes
(
Express
express
,
Javalin
handle
)
{
// hk4e-sdk-os.hoyoverse.com
express
.
get
(
"/hk4e_global/mdk/agreement/api/getAgreementInfos"
,
new
DispatchHttpJsonHandler
(
"{\"retcode\":0,\"message\":\"OK\",\"data\":{\"marketing_agreements\":[]}}"
));
express
.
get
(
"/hk4e_global/mdk/agreement/api/getAgreementInfos"
,
new
HttpJsonResponse
(
"{\"retcode\":0,\"message\":\"OK\",\"data\":{\"marketing_agreements\":[]}}"
));
// hk4e-sdk-os.hoyoverse.com
// this could be either GET or POST based on the observation of different clients
express
.
all
(
"/hk4e_global/combo/granter/api/compareProtocolVersion"
,
new
DispatchHttpJsonHandler
(
"{\"retcode\":0,\"message\":\"OK\",\"data\":{\"modified\":true,\"protocol\":{\"id\":0,\"app_id\":4,\"language\":\"en\",\"user_proto\":\"\",\"priv_proto\":\"\",\"major\":7,\"minimum\":0,\"create_time\":\"0\",\"teenager_proto\":\"\",\"third_proto\":\"\"}}}"
));
express
.
all
(
"/hk4e_global/combo/granter/api/compareProtocolVersion"
,
new
HttpJsonResponse
(
"{\"retcode\":0,\"message\":\"OK\",\"data\":{\"modified\":true,\"protocol\":{\"id\":0,\"app_id\":4,\"language\":\"en\",\"user_proto\":\"\",\"priv_proto\":\"\",\"major\":7,\"minimum\":0,\"create_time\":\"0\",\"teenager_proto\":\"\",\"third_proto\":\"\"}}}"
));
// api-account-os.hoyoverse.com
express
.
post
(
"/account/risky/api/check"
,
new
DispatchHttpJsonHandler
(
"{\"retcode\":0,\"message\":\"OK\",\"data\":{\"id\":\"none\",\"action\":\"ACTION_NONE\",\"geetest\":null}}"
));
express
.
post
(
"/account/risky/api/check"
,
new
HttpJsonResponse
(
"{\"retcode\":0,\"message\":\"OK\",\"data\":{\"id\":\"none\",\"action\":\"ACTION_NONE\",\"geetest\":null}}"
));
// sdk-os-static.hoyoverse.com
express
.
get
(
"/combo/box/api/config/sdk/combo"
,
new
DispatchHttpJsonHandler
(
"{\"retcode\":0,\"message\":\"OK\",\"data\":{\"vals\":{\"disable_email_bind_skip\":\"false\",\"email_bind_remind_interval\":\"7\",\"email_bind_remind\":\"true\"}}}"
));
express
.
get
(
"/combo/box/api/config/sdk/combo"
,
new
HttpJsonResponse
(
"{\"retcode\":0,\"message\":\"OK\",\"data\":{\"vals\":{\"disable_email_bind_skip\":\"false\",\"email_bind_remind_interval\":\"7\",\"email_bind_remind\":\"true\"}}}"
));
// hk4e-sdk-os-static.hoyoverse.com
express
.
get
(
"/hk4e_global/combo/granter/api/getConfig"
,
new
DispatchHttpJsonHandler
(
"{\"retcode\":0,\"message\":\"OK\",\"data\":{\"protocol\":true,\"qr_enabled\":false,\"log_level\":\"INFO\",\"announce_url\":\"https://webstatic-sea.hoyoverse.com/hk4e/announcement/index.html?sdk_presentation_style=fullscreen\\u0026sdk_screen_transparent=true\\u0026game_biz=hk4e_global\\u0026auth_appid=announcement\\u0026game=hk4e#/\",\"push_alias_type\":2,\"disable_ysdk_guard\":false,\"enable_announce_pic_popup\":true}}"
));
express
.
get
(
"/hk4e_global/combo/granter/api/getConfig"
,
new
HttpJsonResponse
(
"{\"retcode\":0,\"message\":\"OK\",\"data\":{\"protocol\":true,\"qr_enabled\":false,\"log_level\":\"INFO\",\"announce_url\":\"https://webstatic-sea.hoyoverse.com/hk4e/announcement/index.html?sdk_presentation_style=fullscreen\\u0026sdk_screen_transparent=true\\u0026game_biz=hk4e_global\\u0026auth_appid=announcement\\u0026game=hk4e#/\",\"push_alias_type\":2,\"disable_ysdk_guard\":false,\"enable_announce_pic_popup\":true}}"
));
// hk4e-sdk-os-static.hoyoverse.com
express
.
get
(
"/hk4e_global/mdk/shield/api/loadConfig"
,
new
DispatchHttpJsonHandler
(
"{\"retcode\":0,\"message\":\"OK\",\"data\":{\"id\":6,\"game_key\":\"hk4e_global\",\"client\":\"PC\",\"identity\":\"I_IDENTITY\",\"guest\":false,\"ignore_versions\":\"\",\"scene\":\"S_NORMAL\",\"name\":\"原神海外\",\"disable_regist\":false,\"enable_email_captcha\":false,\"thirdparty\":[\"fb\",\"tw\"],\"disable_mmt\":false,\"server_guest\":false,\"thirdparty_ignore\":{\"tw\":\"\",\"fb\":\"\"},\"enable_ps_bind_account\":false,\"thirdparty_login_configs\":{\"tw\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":604800},\"fb\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":604800}}}}"
));
express
.
get
(
"/hk4e_global/mdk/shield/api/loadConfig"
,
new
HttpJsonResponse
(
"{\"retcode\":0,\"message\":\"OK\",\"data\":{\"id\":6,\"game_key\":\"hk4e_global\",\"client\":\"PC\",\"identity\":\"I_IDENTITY\",\"guest\":false,\"ignore_versions\":\"\",\"scene\":\"S_NORMAL\",\"name\":\"原神海外\",\"disable_regist\":false,\"enable_email_captcha\":false,\"thirdparty\":[\"fb\",\"tw\"],\"disable_mmt\":false,\"server_guest\":false,\"thirdparty_ignore\":{\"tw\":\"\",\"fb\":\"\"},\"enable_ps_bind_account\":false,\"thirdparty_login_configs\":{\"tw\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":604800},\"fb\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":604800}}}}"
));
// Test api?
// abtest-api-data-sg.hoyoverse.com
express
.
post
(
"/data_abtest_api/config/experiment/list"
,
new
DispatchHttpJsonHandler
(
"{\"retcode\":0,\"success\":true,\"message\":\"\",\"data\":[{\"code\":1000,\"type\":2,\"config_id\":\"14\",\"period_id\":\"6036_99\",\"version\":\"1\",\"configs\":{\"cardType\":\"old\"}}]}"
));
// hk4e-api-os.hoyoverse.com
express
.
all
(
"/common/hk4e_global/announcement/api/getAlertPic"
,
new
DispatchHttpJsonHandler
(
"{\"retcode\":0,\"message\":\"OK\",\"data\":{\"total\":0,\"list\":[]}}"
));
// hk4e-api-os.hoyoverse.com
express
.
all
(
"/common/hk4e_global/announcement/api/getAlertAnn"
,
new
DispatchHttpJsonHandler
(
"{\"retcode\":0,\"message\":\"OK\",\"data\":{\"alert\":false,\"alert_id\":0,\"remind\":true}}"
));
express
.
post
(
"/data_abtest_api/config/experiment/list"
,
new
HttpJsonResponse
(
"{\"retcode\":0,\"success\":true,\"message\":\"\",\"data\":[{\"code\":1000,\"type\":2,\"config_id\":\"14\",\"period_id\":\"6036_99\",\"version\":\"1\",\"configs\":{\"cardType\":\"old\"}}]}"
));
// log-upload-os.mihoyo.com
express
.
all
(
"/log/sdk/upload"
,
new
DispatchHttpJsonHandler
(
"{\"code\":0}"
));
express
.
all
(
"/sdk/upload"
,
new
DispatchHttpJsonHandler
(
"{\"code\":0}"
));
express
.
post
(
"/sdk/dataUpload"
,
new
DispatchHttpJsonHandler
(
"{\"code\":0}"
));
express
.
all
(
"/log/sdk/upload"
,
new
HttpJsonResponse
(
"{\"code\":0}"
));
express
.
all
(
"/sdk/upload"
,
new
HttpJsonResponse
(
"{\"code\":0}"
));
express
.
post
(
"/sdk/dataUpload"
,
new
HttpJsonResponse
(
"{\"code\":0}"
));
// /perf/config/verify?device_id=xxx&platform=x&name=xxx
express
.
all
(
"/perf/config/verify"
,
new
DispatchHttpJsonHandler
(
"{\"code\":0}"
));
express
.
all
(
"/perf/config/verify"
,
new
HttpJsonResponse
(
"{\"code\":0}"
));
// webstatic-sea.hoyoverse.com
express
.
get
(
"/admin/mi18n/plat_oversea/m202003048/m202003048-version.json"
,
new
DispatchHttpJsonHandler
(
"{\"version\":51}"
));
express
.
get
(
"/admin/mi18n/plat_oversea/m202003048/m202003048-version.json"
,
new
HttpJsonResponse
(
"{\"version\":51}"
));
express
.
get
(
"/status/server"
,
GenericHandler:
:
serverStatus
);
}
private
static
void
serverStatus
(
Request
request
,
Response
response
)
{
int
playerCount
=
Grasscutter
.
getGameServer
().
getPlayers
().
size
();
String
version
=
GameConstants
.
VERSION
;
response
.
send
(
"{\"retcode\":0,\"status\":{\"playerCount\":"
+
playerCount
+
",\"version\":\""
+
version
+
"\"}}"
);
}
}
src/main/java/emu/grasscutter/server/http/handlers/LegacyAuthHandler.java
0 → 100644
View file @
3adf0d44
package
emu.grasscutter.server.http.handlers
;
import
emu.grasscutter.server.http.Router
;
import
express.Express
;
import
io.javalin.Javalin
;
/**
* Handles the legacy authentication system routes.
*/
public
final
class
LegacyAuthHandler
implements
Router
{
@Override
public
void
applyRoutes
(
Express
express
,
Javalin
handle
)
{
express
.
get
(
"/authentication/type"
,
(
request
,
response
)
->
response
.
status
(
500
).
send
(
"{\"notice\":\"This API is deprecated.\"}"
));
express
.
post
(
"/authentication/login"
,
(
request
,
response
)
->
response
.
status
(
500
).
send
(
"{\"notice\":\"This API is deprecated.\"}"
));
express
.
post
(
"/authentication/register"
,
(
request
,
response
)
->
response
.
status
(
500
).
send
(
"{\"notice\":\"This API is deprecated.\"}"
));
express
.
post
(
"/authentication/change_password"
,
(
request
,
response
)
->
response
.
status
(
500
).
send
(
"{\"notice\":\"This API is deprecated.\"}"
));
}
}
\ No newline at end of file
src/main/java/emu/grasscutter/server/http/handlers/LogHandler.java
View file @
3adf0d44
package
emu.grasscutter.server.http.handlers
;
import
emu.grasscutter.server.dispatch.ClientLogHandler
;
import
emu.grasscutter.server.http.Router
;
import
express.Express
;
import
express.http.Request
;
import
express.http.Response
;
import
io.javalin.Javalin
;
/**
...
...
@@ -11,8 +12,13 @@ import io.javalin.Javalin;
public
final
class
LogHandler
implements
Router
{
@Override
public
void
applyRoutes
(
Express
express
,
Javalin
handle
)
{
// overseauspider.yuanshen.com
express
.
post
(
"/log"
,
new
Client
LogHandler
()
);
express
.
post
(
"/log"
,
LogHandler
:
:
log
);
// log-upload-os.mihoyo.com
express
.
post
(
"/crash/dataUpload"
,
new
ClientLogHandler
());
express
.
post
(
"/crash/dataUpload"
,
LogHandler:
:
log
);
}
private
static
void
log
(
Request
request
,
Response
response
)
{
// TODO: Figure out how to dump request body and log to file.
response
.
send
(
"{\"code\":0}"
);
}
}
src/main/java/emu/grasscutter/server/
dispatch/DispatchHttpJsonHandler
.java
→
src/main/java/emu/grasscutter/server/
http/objects/HttpJsonResponse
.java
View file @
3adf0d44
package
emu.grasscutter.server.
dispatch
;
package
emu.grasscutter.server.
http.objects
;
import
java.io.IOException
;
import
java.util.Arrays
;
...
...
@@ -13,7 +13,7 @@ import express.http.Response;
import
static
emu
.
grasscutter
.
utils
.
Language
.
translate
;
import
static
emu
.
grasscutter
.
Configuration
.*;
public
final
class
DispatchHttpJsonHandler
implements
HttpContextHandler
{
public
final
class
HttpJsonResponse
implements
HttpContextHandler
{
private
final
String
response
;
private
final
String
[]
missingRoutes
=
{
// TODO: When http requests for theses routes are found please remove it from this list and update the route request type in the DispatchServer
"/common/hk4e_global/announcement/api/getAlertPic"
,
...
...
@@ -28,7 +28,7 @@ public final class DispatchHttpJsonHandler implements HttpContextHandler {
"/crash/dataUpload"
};
public
DispatchHttpJsonHandler
(
String
response
)
{
public
HttpJsonResponse
(
String
response
)
{
this
.
response
=
response
;
}
...
...
src/main/java/emu/grasscutter/server/packet/send/PacketPlayerLoginRsp.java
View file @
3adf0d44
...
...
@@ -9,10 +9,12 @@ import emu.grasscutter.net.proto.PlayerLoginRspOuterClass.PlayerLoginRsp;
import
emu.grasscutter.net.proto.QueryCurrRegionHttpRspOuterClass
;
import
emu.grasscutter.net.proto.RegionInfoOuterClass.RegionInfo
;
import
emu.grasscutter.server.game.GameSession
;
import
emu.grasscutter.server.http.dispatch.RegionHandler
;
import
emu.grasscutter.utils.FileUtils
;
import
java.io.File
;
import
java.util.Base64
;
import
java.util.Objects
;
import
static
emu
.
grasscutter
.
Configuration
.*;
...
...
@@ -55,7 +57,7 @@ public class PacketPlayerLoginRsp extends BasePacket {
info
=
regionCache
.
getRegionInfo
();
}
else
{
info
=
Grasscutter
.
getDispatchServer
()
.
getCurrRegion
().
getRegionInfo
();
info
=
Objects
.
requireNonNull
(
RegionHandler
.
getCurr
ent
Region
()
)
.
getRegionInfo
();
}
PlayerLoginRsp
p
=
PlayerLoginRsp
.
newBuilder
()
...
...
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment