3.9 KiB
Server
For Server-sided operations.
Getting the Server Object
local Server = Warp.Server()
.reg_namespaces
Register namespaces to ensure all of the namespaces is being registered earlier on the server to prevent any unexpected issues on the client. but this is optional and conditional, you may have to use this if you had a problem with identifier namespace on client.
::: code-group
(
namespaces: { string },
) -> Connection
Server.reg_namespaces({
"ServerNotify",
"ServerMessage",
"WelcomeMessage",
"Broadcast",
"DataReplication",
"RequestData",
"Update"
})
:::
.Connect
Connect to an event to receive incoming data from clients.
::: code-group
(
remoteName: string,
fn: (player: Player, ...any) -> ...any
) -> Connection
local connection = Server.Connect("ServerNotify", function(player, message)
print(`Client message from {player}: {message}`)
end)
print(connection.Connected)
:::
.Once
Similar to :Connect but automatically disconnects after the first firing.
::: code-group
(
remoteName: string,
fn: (player: Player, ...any) -> ...any
) -> Connection
Server.Once("WelcomeMessage", function(welcomeText)
print(`Welcome: {welcomeText}`)
end)
:::
.Wait
Wait for an event to be triggered.
::: code-group
(
remoteName: string
) -> (number, ...any)
local elapsed, message = Server.Wait("ServerMessage")
print(`Received message after {elapsed} seconds: {message}`)
:::
.DisconnectAll
Disconnect all connections for a specific event.
::: code-group
(
remoteName: string
)
Server.DisconnectAll("ServerNotify")
:::
.Destroy
Disconnect all connections and remove the event.
::: code-group
(
remoteName: string
)
Server.Destroy("ServerNotify")
:::
.Fire
Fire an event to a specific player.
::: code-group
(
remoteName: string,
reliable: boolean,
player: Player,
...: any
)
Server.Fire("ServerNotify", true, player, "Hello from server!")
:::
.Fires
Fire an event to all connected players.
::: code-group
(
remoteName: string,
reliable: boolean,
...: any
)
Server.Fires("Broadcast", true, "Server announcement!")
:::
.FireExcept
Fire an event to all players except specified ones.
::: code-group
(
remoteName: string,
reliable: boolean,
except: { Player },
...: any
)
local excludedPlayers = { player1, player2 }
Server.FireExcept("Update", true, excludedPlayers, "Game update")
:::
.Invoke
Invoke a client with timeout support.
::: code-group
(
remoteName: string,
player: Player,
timeout: number?,
...: any
) -> ...any
local response = Server.Invoke("RequestData", player, 3, "userInfo")
if response then
print("Client responded:", response)
else
print("Request timed out")
end
:::
::: warning
This function is yielded. Returns nil if timeout occurs.
:::
.useSchema
Define a schema for strict data packing on a specific event.
::: code-group
(
remoteName: string,
schema: Buffer.SchemaType
)
local Server = Warp.Server()
local dataSchema = Server.Schema.struct({
Coins = Server.Schema.u32,
Level = Server.Schema.u8,
Inventory = Server.Schema.array(Server.Schema.u32),
Settings = Server.Schema.struct({
VFX = Server.Schema.boolean,
Volume = Server.Schema.f32,
Language = Server.Schema.string,
})
})
Server.useSchema("DataReplication", dataSchema)
:::
.Schema
Access to Buffer.Schema for creating data schemas.