Network Functions

Network Functions

Network Functions allow for two-way client to server communication and follow a request and response format.

Network Functions

Overview

An example of when a RemoteFunction would be appropriate is a player requesting to open a loot crate. First the player tells the server the kind of crate it would like to open, and the server responds with what the player received.

CrateManager.ts
interface CrateResponse {
    item: string;
    rarity: string;
}

export default class CrateManager extends AirshipSingleton {
    // Creating a NetworkFunction
    private open =
        new NetworkFunction<{ crateType: string }, CrateResponse>("LootCrate");

    public override Start(): void {
        if (Game.IsClient()) {
            // Tell the server that you'd like to open a loot crate
            const loot = this.open.client.FireServer({ crateType: "weapon" });
            print(`You received a ${loot.rarity} ${loot.item}`);
        }

        if (Game.IsServer()) {
            // Listen for player crate open requests
            this.openCrate.server.SetCallback((player, event) => {
                return {
                    item: "sword",
                    rarity: "legendary",
                }
            });
        }
    }
}

Example Use Cases

Example
Explanation

Purchase Request

Client requests to purchase an item, server validates the transaction, client is notified of the result

Creating a Network Function

Like Network Signals, Network Functions can be created inside of any script. A NetworkFunction expects two generic parameters: a request type and response type.

Shared
interface CrateResponse {
    item: string;
    rarity: string;
}

const openCrate = 
    new NetworkFunction<{ crateType: string }, CrateResponse>("LootCrate");

Client -> Server -> Client

Firing a Network Function on the client

Client
const loot = openCrate.client.FireServer({ crateType: "weapon" });
print(`You received a ${loot.rarity} ${loot.item}`);

Listening to Network Functions on the server

Server
openCrate.server.SetCallback((player, event) => {
    return {
        item: "sword",
        rarity: "legendary",
    };
});

SetCallback's first parameter is always the Player who fired the network function.


Server -> Client -> Server

Network Functions that originate on the server behave exactly the same.

NetworkFunctions are synchronous, the active thread will yield until the callback returns. Consider wrapping FireServer and FireClient calls inside of task.spawn to avoid interfering with the flow of your game.

Last updated