Warp/docs/api/1.1/server.md
2026-02-11 20:23:30 +07:00

3.4 KiB

Server

For Server-sided operations.

Getting the Server Object

local Server = Warp.Server()

.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.