Skip to content

Broadcast

Elijah Cobb edited this page Apr 20, 2020 · 3 revisions

A really helpful method on LiServer is broadcast(). With broadcast, you can invoke a command on every connected socket at the same time. It runs all commands in parallel but will wait for all sockets to respond (unless a socket times out). It then combines all the return values from all the sockets into a map where the key is the socket's id and the value is the return value for the command invoked on all of them.

Instead of using Promise.all(), this is using something else so that if a socket throws an error, it will not error out the entire broadcast. Instead, if a socket throws an error or cannot be reached, the broadcast manager will assign undefined as the return value for that socket.

For example, if you had a command named "getFavoriteNumber" where the parameter type is void and return value is number, the command registry would look like:

{
    ... // more commands

    getFavoriteNumber: {
        param: void,
        return: number
    }
}

You could send this broadcast to all clients like:

const returnValues = await server.broadcast("getFavoriteNumber", undefined);

where returnValues could look like:

{
    aaaa: 32,
    bbbb: undefined,
    cccc: 8
}

This can be really helpful if you need to query all the connected sockets but don't necessarily want to have to hold up the process and ask them one at a time when you already know it will all be the same type.

Pages

element-ts

Element is a group of developer tools I have built in TypeScript. Check them out at: element-ts.com.

About

Author: Elijah Cobb

NPM: @element-ts/lithium

Issue Reporting: Github Issues

Clone this wiki locally