🌉flamework-gateways-mod🌉
A Flamework networking mod
✨ Featuring
🌉 Gateways - Handle remote events and functions with classes
🛡️ Guards - Block certain requests before they are processed
📞 Pipes - Transform and validate parameters passed to requests
🌻 Motivation
This is mainly a personal project to handle remotes with classes and decorators.
⚠️ Limitations
❌ Client-side RemoteFunctions are not supported
- It is difficult for the server to safely determine whether a client remote is a function or an event.
🔌 Installation
npm install @flamework/core@modding
npm install -D rbxts-transformer-flamework@modding
npm install @rbxts/flamework-gateways-mod
📚 Examples
🗂️ Client-server connection
connectServer
and connectClient
should be called before igniting Flamework.
const server = connectServer<ServerGateway, ClientGateway>();
server.emit("clientEvent", players, ...args);
server.broadcast("clientEvent", ...args);
const client = connectClient<ServerGateway, ClientGateway>();
client.emit("serverEvent", ...args);
await client.request("serverInvoke", ...args);
🌉 Gateway
Gateways should be added to Flamework.addPaths()
.
@Gateway({
guards: [new AdminGuard(["littensy"])],
})
class AdminGateway {
constructor(private readonly adminService: AdminService) {}
@OnEvent()
@UsePipes([], CommandPipe)
async processCommand(player: Player, message: string): Promise<void>;
async processCommand(player: Player, tokens: string | Array<string>) {
this.adminService.runCommand(player, tokens as Array<string>);
}
@OnInvoke()
async getCommands() {
return this.adminService.getCommands();
}
}
🛡️ Guard
class AdminGuard implements CanActivate {
constructor(private readonly admins: Array<string>) {}
canActivate(context: ExecutionContext)
return this.admins.includes(context.getPlayer().Name);
}
}
📞 Pipe
class CommandPipe implements PipeTransform {
transform(value: unknown) {
assert(typeIs(value, "string"), "(CommandPipe) Value must be a string");
return value.split(" ");
}
}