[Network] Use ModManager networking API in VT2

This commit is contained in:
manuel.blanc 2021-01-23 22:34:28 +01:00 committed by Dreomite
parent 9420230669
commit 6d8f93a35e
2 changed files with 87 additions and 70 deletions

View file

@ -12,6 +12,8 @@ local _shared_rpcs_map = ""
local _network_module_is_initialized = false local _network_module_is_initialized = false
local _network_debug = false local _network_debug = false
local VT2_PORT_NUMBER = 0
local VERMINTIDE_CHANNEL_ID = 1 local VERMINTIDE_CHANNEL_ID = 1
local RPC_VMF_REQUEST_CHANNEL_ID = 3 local RPC_VMF_REQUEST_CHANNEL_ID = 3
local RPC_VMF_RESPONCE_CHANNEL_ID = 4 local RPC_VMF_RESPONCE_CHANNEL_ID = 4
@ -131,14 +133,20 @@ end
-- NETWORK -- NETWORK
local function rpc_chat_message(member, channel_id, message_sender, message, localization_param, local rpc_chat_message
is_system_message, pop_chat, is_dev)
if VT1 then if VT1 then
rpc_chat_message = function(member, channel_id, message_sender, message, localization_param,
is_system_message, pop_chat, is_dev)
RPC.rpc_chat_message(member, channel_id, message_sender, message, localization_param, RPC.rpc_chat_message(member, channel_id, message_sender, message, localization_param,
is_system_message, pop_chat, is_dev) is_system_message, pop_chat, is_dev)
end
else else
RPC.rpc_chat_message(PEER_ID_TO_CHANNEL[member], channel_id, message_sender, 0, message, {localization_param}, local _payload = {"","",""}
false, false, is_system_message, pop_chat, is_dev, 0) rpc_chat_message = function(member, channel_id, _, rpc_data1, rpc_data2)
_payload[1] = tostring(channel_id)
_payload[2] = rpc_data1
_payload[3] = rpc_data2
Managers.mod:network_send(member, VT2_PORT_NUMBER, _payload)
end end
end end
@ -238,27 +246,11 @@ end
-- ##### Hooks ######################################################################################################## -- ##### Hooks ########################################################################################################
-- #################################################################################################################### -- ####################################################################################################################
vmf:hook("ChatManager", "rpc_chat_message", local function vmf_network_recv(sender, channel_id, rpc_data1, rpc_data2)
function(func, self, sender, channel_id, message_sender, arg1, arg2, arg3, ...)
if channel_id == VERMINTIDE_CHANNEL_ID then
func(self, sender, channel_id, message_sender, arg1, arg2, arg3, ...)
else
sender = CHANNEL_TO_PEER_ID[sender]
if not _network_module_is_initialized then if not _network_module_is_initialized then
return return
end end
local rpc_data1, rpc_data2
if VT1 then
rpc_data1 = arg1
rpc_data2 = arg2
else
rpc_data1 = arg2
rpc_data2 = arg3[1]
end
if channel_id == RPC_VMF_REQUEST_CHANNEL_ID then -- rpc_vmf_request if channel_id == RPC_VMF_REQUEST_CHANNEL_ID then -- rpc_vmf_request
network_debug("ping", "received", sender) network_debug("ping", "received", sender)
@ -316,7 +308,18 @@ vmf:hook("ChatManager", "rpc_chat_message",
end end
end end
end end
if VT1 then
vmf:hook("ChatManager", "rpc_chat_message",
function(func, self, sender, channel_id, message_sender, arg1, arg2, ...)
if channel_id == VERMINTIDE_CHANNEL_ID then
func(self, sender, channel_id, message_sender, arg1, arg2, ...)
else
vmf_network_recv(sender, channel_id, arg1, arg2)
end
end) end)
end
-- VT2 uses the networking API provided by the ModManager.
vmf:hook(PlayerManager, "add_remote_player", function (func, self, peer_id, player_controlled, ...) vmf:hook(PlayerManager, "add_remote_player", function (func, self, peer_id, player_controlled, ...)
@ -385,9 +388,21 @@ vmf.create_network_dictionary = function()
_shared_mods_map = cjson.encode(_shared_mods_map) _shared_mods_map = cjson.encode(_shared_mods_map)
_shared_rpcs_map = cjson.encode(_shared_rpcs_map) _shared_rpcs_map = cjson.encode(_shared_rpcs_map)
if not VT1 then
Managers.mod:network_bind(0, function(sender, payload)
vmf_network_recv(sender, tonumber(payload[1]), payload[2], payload[3])
end)
end
_network_module_is_initialized = true _network_module_is_initialized = true
end end
vmf.network_unload = function()
if not VT1 then
Managers.mod:network_unbind(VT2_PORT_NUMBER)
end
end
vmf.ping_vmf_users = function() vmf.ping_vmf_users = function()
if Managers.player then if Managers.player then

View file

@ -82,6 +82,7 @@ function vmf_mod_object:on_unload()
print("VMF:ON_UNLOAD()") print("VMF:ON_UNLOAD()")
vmf.save_chat_history() vmf.save_chat_history()
vmf.save_unsaved_settings_to_file() vmf.save_unsaved_settings_to_file()
vmf.network_unload()
end end
@ -94,6 +95,7 @@ function vmf_mod_object:on_reload()
vmf.unload_all_resource_packages() vmf.unload_all_resource_packages()
vmf.hooks_unload() vmf.hooks_unload()
vmf.reset_guis() vmf.reset_guis()
vmf.network_unload()
end end