Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- AUTHOR: kirda @imKirda
- DATE: April 7 2021
- DESC:
- Loads framework on the server
- API:
- SHARED:
- void registerRemoteEvent(string, RemoteEvent)
- - Registers remote event with given name if one does not alreay exist
- - If second argument is nil, creates new remote event
- void registerRemoteFunction(string, RemoteFunction)
- - Registers remote function with given name if does not already exist
- - If second argument is nil, creates new remote function
- void deleteRemoteEvent(string)
- - Destroys remote event with given name if found
- void deleteRemoteFunction(string)
- - Destroys remote function with given name if found
- void fireRemoteEvent(string, Player, any...)
- - Fires remote event with given name to given client if found
- - Passes next parameters as tuple to the event fire parameter
- any... invokeRemoteFunction(string, Player, any...)
- - Invokes remote function with given name to given client if found
- - Passes next parameters as tuple to the invoke parameter, returns result
- void fireRemoteEventAll(string, ...)
- - Fires remote event with given name to all clients
- - Passes next parameters as tuple to the fire parameter
- RBXScriptConnection onRemoteEvent(string, function)
- - Connects given function to event with given name
- - Returns the connection
- void onRemoteFunction(string, function)
- - Sets function with given name's invoke callback to given function
- --]]
- local ServerScriptService = game:GetService("ServerScriptService")
- local ReplicatedStorage = game:GetService("ReplicatedStorage")
- local ServerStorage = game:GetService("ServerStorage")
- local Framework do
- local framework_module = ReplicatedStorage:FindFirstChild("@framework")
- if framework_module then
- Framework = require(framework_module)
- else
- error("Could not find '@framework' module in 'ReplicatedStorage'")
- end
- end
- local Internal = Framework.getInternal()
- local communication_folder = Internal.assertFolder("Communication", ServerStorage)
- local modules_folder = Internal.assertFolder("Modules", ServerScriptService)
- local Shared = Internal.getShared()
- local Server = {
- Functions = {},
- Bindable = {
- Functions = {},
- Events = {},
- },
- Modules = {},
- CommunicationFolder = communication_folder,
- ModulesFolder = modules_folder,
- }
- function Server.Functions.registerRemoteEvent(event_name, event_instance)
- Framework.assertType(event_name, "string", 1)
- if Shared.Functions.getRemoteEvent(event_name) then
- error(("'%s' remote event is already registered"):format(event_name), 2)
- end
- local event do
- if event_instance then
- Framework.assertType(event_instance, "RemoteEvent", 2)
- Internal.setInstanceName(event_instance, event_name)
- event = event_instance
- else
- event = Instance.new("RemoteEvent")
- event.Name = event_name
- end
- end
- Internal.setInstanceParent(event, Shared.NetworkFolder)
- Shared.Network.Events[event_name] = event
- Shared.Network.Events["@register_remote"]:FireAllClients(event)
- end
- function Server.Functions.registerRemoteFunction(function_name, function_instance)
- Framework.assertType(function_name, "string", 1)
- if Shared.Functions.getRemoteFunction(function_name) then
- error(("'%s' remote function is already registered"):format(function_name), 2)
- end
- local _function do
- if function_instance then
- Framework.assertType(function_name, "RemoteFunction", 2)
- Internal.setInstanceName(function_instance, function_name)
- _function = function_instance
- else
- _function = Instance.new("RemoteFunction")
- _function.Name = function_name
- end
- end
- Internal.setInstanceParent(_function, Shared.NetworkFolder)
- Shared.Network.Functions[function_name] = _function
- Shared.Network.Events["@register_remote"]:FireAllClients(_function)
- end
- function Server.Functions.deleteRemoteEvent(event_name)
- Framework.assertType(event_name, "string", 1)
- local event = Shared.Functions.getRemoteEvent(event_name)
- if event then
- event:Destroy()
- else
- error(("'%s' is not an existing remote event"):format(event_name), 2)
- end
- end
- function Server.Functions.deleteRemoteFunction(function_name)
- Framework.assertType(function_name, "string", 1)
- local _function = Shared.Functions.getRemoteFunction(function_name)
- if _function then
- _function:Destroy()
- else
- error(("'%s' is not an existing remote functions"):format(function_name), 2)
- end
- end
- function Server.Functions.fireRemoteEvent(event_name, client, ...)
- Framework.assertType(event_name, "string", 1)
- Framework.assertType(client, "Player", 2)
- local event = Shared.Functions.getRemoteEvent(event_name)
- if event then
- event:FireClient(client, ...)
- else
- error(("'%s' is not an existing remote event"):format(event_name), 2)
- end
- end
- function Server.Functions.fireRemoteEventAll(event_name, ...)
- Framework.assertType(event_name, "string", 1)
- local event = Shared.Functions.getRemoteEvent(event_name)
- if event then
- event:FireAllClients(...)
- else
- error(("'%s' is not an existing remote event"):format(event_name), 2)
- end
- end
- function Server.Functions.invokeRemoteFunction(function_name, client, ...)
- Framework.assertType(function_name, "string", 1)
- Framework.assertType(client, "Player", 2)
- local _function = Shared.Functions.getRemoteFunction(function_name)
- if _function then
- return _function:InvokeClient(client, ...)
- else
- error(("'%s' is not an existing remote function"):format(function_name), 2)
- end
- end
- function Server.Functions.onRemoteEvent(event_name, callback)
- Framework.assertType(event_name, "string", 1)
- Framework.assertType(callback, "function", 2)
- local event = Shared.Functions.getRemoteEvent(event_name)
- if event then
- return event.OnServerEvent:Connect(callback)
- else
- error(("'%s' is not an existing remote event"):format(event_name), 2)
- end
- end
- function Server.Functions.onRemoteFunction(function_name, callback)
- Framework.assertType(function_name, "string", 1)
- Framework.assertType(callback, "function", 2)
- local _function = Shared.Functions.getRemoteFunction(function_name)
- if _function then
- _function.OnServerInvoke = callback
- else
- error(("'%s' is not an existing remote function"):format(function_name), 2)
- end
- end
- --[[
- Main entry function
- Loads framework on the server
- --]]
- local function init()
- Internal.lockInternal()
- Internal.initialize()
- Internal.connect(Server)
- Internal.finishInitializationPeriod()
- Internal.start()
- Internal.clear()
- end
- init()
Add Comment
Please, Sign In to add comment