mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-21 07:08:26 +00:00
Cleanup of various things, made writing method handlers in web_interface easier now you just have to check args
This commit is contained in:
@@ -14,7 +14,7 @@ void register_authorized_methods()
|
||||
authorized_methods["World.GetZoneDetails"] = std::make_pair(10, handle_method_get_zone_info);
|
||||
authorized_methods["Zone.Subscribe"] = std::make_pair(10, handle_method_subscribe);
|
||||
authorized_methods["Zone.Unsubscribe"] = std::make_pair(10, handle_method_subscribe);
|
||||
authorized_methods["Zone.GetInitialEntityPositions"] = std::make_pair(10, handle_method_void_event);
|
||||
authorized_methods["Zone.GetInitialEntityPositions"] = std::make_pair(10, handle_method_zone_no_args);
|
||||
}
|
||||
|
||||
void register_unauthorized_methods()
|
||||
@@ -45,17 +45,7 @@ void handle_method_no_args(per_session_data_eqemu *session, rapidjson::Document
|
||||
CheckParams(0, "[]");
|
||||
VerifyID();
|
||||
CalculateSize();
|
||||
|
||||
ServerPacket *pack = new ServerPacket(ServerOP_WIRemoteCall, sz);
|
||||
pack->WriteUInt32((uint32)id.size());
|
||||
pack->WriteString(id.c_str());
|
||||
pack->WriteUInt32((uint32)session->uuid.size());
|
||||
pack->WriteString(session->uuid.c_str());
|
||||
pack->WriteUInt32((uint32)method.size());
|
||||
pack->WriteString(method.c_str());
|
||||
pack->WriteUInt32(0);
|
||||
worldserver->SendPacket(pack);
|
||||
safe_delete(pack);
|
||||
WriteWebProtocolPacket();
|
||||
}
|
||||
|
||||
void handle_method_get_zone_info(per_session_data_eqemu *session, rapidjson::Document &document, std::string &method)
|
||||
@@ -63,77 +53,19 @@ void handle_method_get_zone_info(per_session_data_eqemu *session, rapidjson::Doc
|
||||
CheckParams(1, "[zoneserver_id]");
|
||||
VerifyID();
|
||||
CalculateSize();
|
||||
|
||||
ServerPacket *pack = new ServerPacket(ServerOP_WIRemoteCall, sz);
|
||||
pack->WriteUInt32((uint32)id.size());
|
||||
pack->WriteString(id.c_str());
|
||||
pack->WriteUInt32((uint32)session->uuid.size());
|
||||
pack->WriteString(session->uuid.c_str());
|
||||
pack->WriteUInt32((uint32)method.size());
|
||||
pack->WriteString(method.c_str());
|
||||
pack->WriteUInt32(1);
|
||||
|
||||
auto ¶ms = document["params"];
|
||||
auto ¶m = params[(rapidjson::SizeType)0];
|
||||
pack->WriteUInt32((uint32)strlen(param.GetString()));
|
||||
pack->WriteString(param.GetString());
|
||||
worldserver->SendPacket(pack);
|
||||
safe_delete(pack);
|
||||
WriteWebProtocolPacket();
|
||||
}
|
||||
|
||||
void handle_method_subscribe(per_session_data_eqemu *session, rapidjson::Document &document, std::string &method) {
|
||||
CheckParams(3, "[zone_id, instance_id, event_name]");
|
||||
VerifyID();
|
||||
CalculateSize();
|
||||
|
||||
ServerPacket *pack = new ServerPacket(ServerOP_WIRemoteCall, sz);
|
||||
pack->WriteUInt32((uint32)id.size());
|
||||
pack->WriteString(id.c_str());
|
||||
pack->WriteUInt32((uint32)session->uuid.size());
|
||||
pack->WriteString(session->uuid.c_str());
|
||||
pack->WriteUInt32((uint32)method.size());
|
||||
pack->WriteString(method.c_str());
|
||||
pack->WriteUInt32(3);
|
||||
|
||||
auto ¶ms = document["params"];
|
||||
auto ¶m = params[(rapidjson::SizeType)0];
|
||||
pack->WriteUInt32((uint32)strlen(param.GetString()));
|
||||
pack->WriteString(param.GetString());
|
||||
|
||||
param = params[1];
|
||||
pack->WriteUInt32((uint32)strlen(param.GetString()));
|
||||
pack->WriteString(param.GetString());
|
||||
|
||||
param = params[2];
|
||||
pack->WriteUInt32((uint32)strlen(param.GetString()));
|
||||
pack->WriteString(param.GetString());
|
||||
worldserver->SendPacket(pack);
|
||||
safe_delete(pack);
|
||||
WriteWebProtocolPacket();
|
||||
}
|
||||
|
||||
void handle_method_void_event(per_session_data_eqemu *session, rapidjson::Document &document, std::string &method) {
|
||||
void handle_method_zone_no_args(per_session_data_eqemu *session, rapidjson::Document &document, std::string &method) {
|
||||
CheckParams(2, "[zone_id, instance_id]");
|
||||
VerifyID();
|
||||
CalculateSize();
|
||||
|
||||
ServerPacket *pack = new ServerPacket(ServerOP_WIRemoteCall, sz);
|
||||
pack->WriteUInt32((uint32)id.size());
|
||||
pack->WriteString(id.c_str());
|
||||
pack->WriteUInt32((uint32)session->uuid.size());
|
||||
pack->WriteString(session->uuid.c_str());
|
||||
pack->WriteUInt32((uint32)method.size());
|
||||
pack->WriteString(method.c_str());
|
||||
pack->WriteUInt32(2);
|
||||
|
||||
auto ¶ms = document["params"];
|
||||
auto ¶m = params[(rapidjson::SizeType)0];
|
||||
pack->WriteUInt32((uint32)strlen(param.GetString()));
|
||||
pack->WriteString(param.GetString());
|
||||
|
||||
param = params[1];
|
||||
pack->WriteUInt32((uint32)strlen(param.GetString()));
|
||||
pack->WriteString(param.GetString());
|
||||
|
||||
worldserver->SendPacket(pack);
|
||||
safe_delete(pack);
|
||||
WriteWebProtocolPacket();
|
||||
}
|
||||
@@ -29,7 +29,7 @@
|
||||
WriteWebCallResponseString(session, document, "Missing parameters, expected: " + std::string(msg), true); \
|
||||
return; \
|
||||
} \
|
||||
if(params.Size() != sz) { \
|
||||
if(params.Size() < sz) { \
|
||||
WriteWebCallResponseString(session, document, "Missing parameters, expected: " + std::string(msg), true); \
|
||||
return; \
|
||||
} \
|
||||
@@ -56,12 +56,30 @@
|
||||
} \
|
||||
} \
|
||||
|
||||
#define WriteWebProtocolPacket() ServerPacket *pack = new ServerPacket(ServerOP_WIRemoteCall, sz); \
|
||||
pack->WriteUInt32((uint32)id.size()); \
|
||||
pack->WriteString(id.c_str()); \
|
||||
pack->WriteUInt32((uint32)session->uuid.size()); \
|
||||
pack->WriteString(session->uuid.c_str()); \
|
||||
pack->WriteUInt32((uint32)method.size()); \
|
||||
pack->WriteString(method.c_str()); \
|
||||
auto ¶ms = document["params"]; \
|
||||
auto params_sz = params.Size(); \
|
||||
pack->WriteUInt32(params_sz); \
|
||||
for(rapidjson::SizeType i = 0; i < params_sz; ++i) { \
|
||||
auto ¶m = params[(rapidjson::SizeType)i]; \
|
||||
pack->WriteUInt32((uint32)strlen(param.GetString())); \
|
||||
pack->WriteString(param.GetString()); \
|
||||
} \
|
||||
worldserver->SendPacket(pack); \
|
||||
safe_delete(pack); \
|
||||
|
||||
void register_methods();
|
||||
void handle_method_token_auth(per_session_data_eqemu *session, rapidjson::Document &document, std::string &method);
|
||||
void handle_method_no_args(per_session_data_eqemu *session, rapidjson::Document &document, std::string &method);
|
||||
void handle_method_get_zone_info(per_session_data_eqemu *session, rapidjson::Document &document, std::string &method);
|
||||
void handle_method_subscribe(per_session_data_eqemu *session, rapidjson::Document &document, std::string &method);
|
||||
void handle_method_void_event(per_session_data_eqemu *session, rapidjson::Document &document, std::string &method);
|
||||
void handle_method_zone_no_args(per_session_data_eqemu *session, rapidjson::Document &document, std::string &method);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -43,7 +43,8 @@
|
||||
}
|
||||
else if(obj.id == 'get_zone_info_id') {
|
||||
socket.send(JSON.stringify({id: 'subscribe_id', method: 'Zone.Subscribe', params: [obj.result["zone_id"], obj.result["instance_id"], 'NPCPosition']}));
|
||||
} else if(obj.method = "On.NPCPosition") {
|
||||
socket.send(JSON.stringify({id: 'on_entity_pos_id', method: 'Zone.GetInitialEntityPositions', params: [obj.result["zone_id"], obj.result["instance_id"]]}));
|
||||
} else if(obj.method == "On.NPCPosition") {
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -132,7 +132,7 @@ int callback_eqemu(libwebsocket_context *context, libwebsocket *wsi, libwebsocke
|
||||
|
||||
static struct libwebsocket_protocols protocols[] = {
|
||||
{ "http-only", callback_http, 0, 0, },
|
||||
{ "eqemu", callback_eqemu, sizeof(per_session_data_eqemu), 0, },
|
||||
{ "eqemu", callback_eqemu, sizeof(per_session_data_eqemu), 65536, },
|
||||
{ nullptr, nullptr, 0, 0 }
|
||||
};
|
||||
|
||||
@@ -159,7 +159,7 @@ int main() {
|
||||
memset(&info, 0, sizeof info);
|
||||
info.port = config->WebInterfacePort;
|
||||
info.protocols = protocols;
|
||||
info.extensions = libwebsocket_get_internal_extensions();
|
||||
info.extensions = nullptr;
|
||||
info.gid = -1;
|
||||
info.uid = -1;
|
||||
|
||||
|
||||
@@ -137,8 +137,6 @@ void WorldServer::Process(){
|
||||
char *session_id = nullptr;
|
||||
char *method = nullptr;
|
||||
|
||||
DumpPacket(pack);
|
||||
|
||||
session_id = new char[pack->ReadUInt32() + 1];
|
||||
pack->ReadString(session_id);
|
||||
|
||||
@@ -207,7 +205,7 @@ void WorldServer::Process(){
|
||||
uint32 sz = 12;
|
||||
size_t isz = invalidate.size();
|
||||
for(size_t i = 0; i < isz; ++i) {
|
||||
sz += invalidate[i].size();
|
||||
sz += (uint32)invalidate[i].size();
|
||||
sz += 5;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user