Warp/docs/api/1.1/server.md
2026-02-16 17:52:49 +07:00

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 earlier being registered on the server to prevent any unexpected issues on the client. but this is optional, 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.