在调用开始之前在ServiceStack的ServerEventsClient中注册displayName

问题描述 投票:2回答:1

我正在我的应用程序中开发一个小型聊天实现,当有人加入/离开频道以及该人是谁时,我想得到通知。

[在客户端,我正在听OnJoinOnLeave,它们带有ServerEventCommand对象,以展示消息,但是ServerEventCommand对象在服务器端填充了一些看似随机的属性在客户端上注册后。

我正在研究ServerEventsClient对象及其所有属性,但找不到在调用Start()之前让我设置所需属性的方法。

c# servicestack server-sent-events
1个回答
1
投票

displayName不是您设置的属性,它由服务器发送,以标识哪些用户正在加入/离开您所订阅的频道。它要么包含用户的UserName,要么如果您的身份验证提供者不使用用户名(例如,使用电子邮件或ID号),它将使用用户会话的DisplayName属性。

[例如,使用Server Events Client之前,您需要在.start()中注册事件处理程序,然后再调用TypeScript ServerEventsClient

const channels = ["home"];
const client = new ServerEventsClient("/", channels, {
    handlers: {
        onConnect: (sub:ServerEventConnect) => {  // Successful SSE connection
            console.log("You've connected! welcome " + sub.displayName);
        },
        onJoin: (msg:ServerEventJoin) => {        // User has joined subscribed channel
            console.log("Welcome, " + msg.displayName);
        },
        onLeave: (msg:ServerEventLeave) => {      // User has left subscribed channel
            console.log(msg.displayName + " has left the building");
        },
    }).start(); 

只有开始订阅并订阅频道后,您才会收到任何事件。

频道订阅者

大多数服务器事件客户端还允许您获取用户列表,例如使用TypeScript客户端,您可以调用getChannelSubscribers()

client.getChannelSubscribers()
    .then(users => users.forEach(x => 
        console.log(`#${x.userId} @${x.displayName} ${x.profileUrl} ${x.channels}`)));

或者,您也可以直接调用/event-subscribers来获取每个频道中的用户列表,例如:

$.getJSON("/event-subscribers?channels={{ channels }}", function (users) {
});

示例聊天应用程序

作为参考,有许多使用不同语言编写的简单应用程序,它们使用不同的服务器事件客户端来创建简单的聊天应用程序:

JavaScript Client

TypeScript Client

C# Server Events Client

Java Client

© www.soinside.com 2019 - 2024. All rights reserved.