Регистрация displayName с помощью ServerEventsClient ServiceStack перед вызовом запуска - PullRequest
2 голосов
/ 30 января 2020

Я разрабатываю небольшую реализацию чата в своем приложении и хочу получать уведомления, когда кто-то присоединился / покинул канал и кто этот человек.

На стороне клиента я слушаю OnJoin и OnLeave, который принимает объект ServerEventCommand для демонстрации сообщения, но объект ServerEventCommand заполняется некоторыми, казалось бы, случайными свойствами на стороне сервера после того, как я зарегистрировался на стороне клиента.

Я смотрю на объект ServerEventsClient и все его свойства, но не могу найти способ установить нужные мне свойства перед вызовом Start().

1 Ответ

1 голос
/ 30 января 2020

displayName не является установленным вами свойством, оно отправляется сервером, чтобы определить, какие пользователи присоединяются / покидают каналы, на которые вы подписаны. Он будет содержать либо UserName пользователя, либо, если ваш поставщик аутентификации не использует имена пользователей (например, вместо этого использует адрес электронной почты или идентификационный номер), он будет использовать свойство DisplayName сеанса пользователей.

Вы необходимо зарегистрировать обработчики событий в вашем клиенте событий сервера перед вызовом .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 Клиент * 1 032 * Чат https://github.com/NetCoreApps/Chat React Chat https://github.com/ServiceStackApps/ReactChat Клиент TypeScript

C# Сервер событий клиента

Java Клиент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...