Skip to content

Example Service

The following guide explains how to create a simple RemoteEventHandler service, and how to use it.

Remote Handler

First, lets define our Service.

return Catwork.Service {
    Name = "RemoteEventHandler"
}

Building the Fragment

Next, we'll create the Fragment constructor:

    Fragment = function(self, params)
        if not params.ID then
            error("Fragment requires a static identifier")
        end

        if not params.Event then
            error("Fragment requires a connectable event")
        end

        return Catwork:CreateFragmentForService(params, self)
    end

This Fragment constructor simply enforces that the Fragment has an ID, and an Event callback.

We dont need to define any special logic for FragmentAdded here, since all remaining logic escapes the declarative phase. Though, for example, if you wanted to defer Spawning so another system can take over, you can simply add this:

    FragmentAdded = function(self, Fragment)
        RemoteDispatcher:queue(Fragment)
    end

Because we're overloading the default FragmentAdded, the Fragment wont spawn unless we tell it to.

Setting up the Remote

Within our Spawning callback, we create the remote, and hook it to the event:

    Spawning = function(self, Fragment)
        local remote = Instance.new("RemoteEvent")

        remote.Event = function(...)
            Fragment:Event(...)
        end

        remote.Name = Fragment.ID
        remote.Parent = ReplicatedStorage
    end

Note

This assumes you've made a reference to ReplicatedStorage

Using the Remote Handler

In another script, lets require in the RemoteHandler service, and create a Fragment:

local RemoteEventHandler = require(path.to.RemoteEventHandler)

RemoteEventHandler:Fragment {
    ID = "Meowitzer",

    Event = function(self, plr)
        print(`meows at {plr.Name} cutely`)
    end
}

If you run the game, a new Event should appear called Meowitzer, if you FireServer it, it'll print the requested message.