Exposed-Server Functions
Last updated
Was this helpful?
Last updated
Was this helpful?
In many modern Roblox frameworks, such as AeroGameFramework (AGF) or Knit, we expose server-side functions to the client through a structured and dynamic API. This pattern allows client scripts to access and invoke specific server functions seamlessly, mimicking the way you'd call local functions. These exposed server functions simplify client-server communication, ensuring that server-side logic can be invoked safely and efficiently from the client without manual remote event handling.
Exposed-server functions are server-side functions that are exposed to clients for remote invocation. These functions are wrapped around RemoteFunction
s, allowing clients to call server-side logic just like they would call a local method.
In this example, PointsService
is a server-side service, and GetLocalPoints
is a remote function exposed to the client. The client can directly call this function, and the server handles the logic.
Exposed-server functions rely on a dynamic system that abstracts remote communication through a combination of metatables. This system allows developers to access server services and their exposed functions as if they were local.
Service Name: Represents the name of the service that contains the server logic (e.g., PointsService
).
Event/Function Name: Represents the name of the server function that you want to call remotely (e.g., GetLocalPoints
).
Remote Function: A RemoteFunction
object on the server that handles requests from the client and returns a result.
On the client-side, you access these exposed functions via the self.Server
object, which allows you to call server functions as if they were local.
On the server, the functions that the client can call are registered and exposed through a dynamic API. These functions are typically defined within services and then registered as RemoteFunctions that the client can invoke.
In the example above:
PointsService is the service.
GetLocalPoints is the function within the service that the client can call.
The function handles server-side logic, such as retrieving the player's points, and returns the result to the client.
Simplified Client-Server Communication:
The client doesn't need to manually handle RemoteFunction objects. Instead, they can call server functions as if they were local, making the code easier to read and manage.
Dynamic and Flexible:
Since service and function names are dynamically resolved using metatables, this system allows for easy scaling and customization. You can add new services and functions without changing much client-side code.
Fetching Player Data:
Clients often need to request data stored on the server (e.g., player points, inventory, etc.).
Server-side Calculations:
Sometimes the client may need to request complex calculations from the server.
Interacting with Game State:
Clients can send requests to update the game state, such as interacting with NPCs or triggering server-side events.