SignalR javascript订阅中心方法

时间:2019-08-27 12:27:08

标签: javascript architecture signalr signalr.client asp.net-core-signalr

我正在围绕SignalR创建一个包装程序,以实现游戏的连接和整个交互

interface IGameConnection {
    connect(): Promise<void>;

    join(): Promise<void>;
    leave(): Promise<void>;
}

interface IGameEvents {
    onJoin(player: any): void;
    onLeave(player: any): void;
}

class GameConnection implements IGameConnection {
    protected connection: HubConnection;

    constructor(gameEvents: IGameEvents) {
        this.connection = new HubConnectionBuilder()
            .withUrl("http://localhost:5000/hubs/game")
            .configureLogging(LogLevel.Information)
            .build();

        this.connection.on('PlayerJoin', gameEvents.onJoin);
        this.connection.on('PlayerLeave', gameEvents.onLeave);
    }

    async connect(): Promise<void> {
        await this.connection.start();
    }

    async join(): Promise<void> {
        await this.connection.invoke("Join");
    }

    async leave(): Promise<void> {
        await this.connection.invoke("Leave");
    }
}

为来自中心的消息设置事件侦听器的最佳方法是什么,特别是要牢记以下几点:

  

最佳做法是,之后,在HubConnection上调用start方法   上。这样可以确保您的处理程序在任何消息之前都已注册   收到。

我将采用某种结构,使代码以某种方式迫使用户实施特定事件,因为如果在接口IGameConnection界面上定义它们,则用户可以在订阅所有事件之前轻松地调用connect (请记住,可能会有很多事件)。

我当前的想法是通过构造函数强制执行此操作(请参见IGameEvents及其在GameConnection中的用法-如果不通过所有事件处理程序的实现,基本上就不能创建连接实例)

有没有更好的方法来构造此代码?

0 个答案:

没有答案