โ This library is a work in progress! It's API surface may change significantly with updates and their may be bugs. Use at your own risk!
Talkie is an experimental networking library for Roblox.
- ๐ Bandwidth efficient - Have absurd amounts of remotes without any extra cost!
- โป Lightweight
- ๐ Luau typings
- ๐ Super friendly API surface
- ๐งโ๐ป Greatly extensible - pass your own filters!
- ๐ฃ Integration with Promises
-- Client
local Talkie = require(somewhere.Talkie)
local ClientEvent = Talkie.ClientEvent
local messageEvent: Talkie.ClientEvent<string> = ClientEvent("send_message")
messageEvent:send("Hello world!")
-- Server
local Talkie = require(somewhere.Talkie)
local ServerEvent = Talkie.ServerEvent
local TypeGuard = Talkie.Util.TypeGuard
local messageEvent: Talkie.ServerEvent = ServerEvent("send_message")
messageEvent:subscribe(
function(player, message)
print(`[{player}]: {message}`)
end,
-- This utility will handle sanity checks for us!
TypeGuard.new(TypeGuard.Any(), "string")
)
-- Client
local ContentProvider = game:GetService("ContentProvider")
local Talkie = require(somewhere.Talkie)
local ClientEvent = Talkie.ClientEvent
local loadEvent = ClientEvent("load_confirmation")
ContentProvider:PreloadAsync("rbxassetid://00000000", ...)
-- Tell the server we've loaded in
loadEvent:send()
-- Server
local Players = game:GetService("Players")
local Talkie = require(somewhere.Talkie)
local ServerEvent = Talkie.ServerEvent
local loadEvent = ServerEvent("load_confirmation")
local function onPlayerAdded(player: Player)
loadEvent
:expectFrom(player)
:andThen(function()
player:LoadCharacter()
end)
:timeout(30, "Timed out") -- Prevent the player from hanging the event forever!
:catch(warn)
end
Players.PlayerAdded:Connect(onPlayerAdded)
for _, player in Players:GetPlayers() do
onPlayerAdded(player)
end