Отправка сообщения группе не работает в Azure SignalR - PullRequest
2 голосов
/ 01 апреля 2020

Я работаю над Azure SignalR с Azure функциями. Сценарий трансляции работает отлично; однако отправка сообщения группе не работает. Ниже приведен код со стороны Azure Функции:

Ниже приводится метод согласования

@FunctionName("negotiate")
public SignalRConnectionInfo negotiate(
        @HttpTrigger(
            name = "req",
            methods = { HttpMethod.POST },
            authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> req,
        @SignalRConnectionInfoInput(
            name = "connectionInfo",
            hubName = "chat") SignalRConnectionInfo connectionInfo) {

    return connectionInfo;
}

@FunctionName("subscribeToGroup")
@SignalROutput(name = "$return", hubName = "chat")
public SignalRGroupAction subscribeToGroup(
    @HttpTrigger(
        name = "req",
        methods = { HttpMethod.POST },
        authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> req) throws Exception {
    Map<String, String> requestBody = new ObjectMapper().readValue(req.getBody().get(), new TypeReference<HashMap<String, String>>() {});
    return new SignalRGroupAction("add", "groupName", requestBody.get("userId")); //userId is the connectionId sent from client side
}

, после чего запускается отправка сообщения группе:

@FunctionName("sendMessageToChannel")
@SignalROutput(name = "$return", hubName = "chat")
public SignalRMessage sendMessageToChannel(
    @HttpTrigger(
        name = "req",
        methods = { HttpMethod.POST },
        authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> req) throws Exception {

    Map<String, String> messageContainer = new HashMap<>();
    messageContainer.put("sender", "1234");
    messageContainer.put("text", "Hello Group13");

    SignalRMessage message = new SignalRMessage("groupChannel", messageContainer);
    message.groupName = "groupName";

    return message;
}

на сторона клиента; Я слушаю цель groupChannel; то есть

connection.on('groupChannel', function(message) {
    console.log(message);
    $("#groupMessages").append(message.text + "<br/>");
});

не уверен, что я здесь делаю неправильно. для трансляции работает отлично. Метод subscribeToGroup также не выдает никаких исключений, также как и для sendMessageToChannel. он не выдает никаких исключений, но клиент не получает сообщение

1 Ответ

3 голосов
/ 01 апреля 2020

Благодаря @ Thia go Custodio .. это сработало. Проблема заключалась в том, что я не отправлял userId как часть переговоров. После внесения следующих изменений; это сработало:

@FunctionName("negotiate")
public SignalRConnectionInfo negotiate(
        @HttpTrigger(
            name = "req",
            methods = { HttpMethod.POST },
            authLevel = AuthorizationLevel.ANONYMOUS,
            route = "{userId}/negotiate") HttpRequestMessage<Optional<String>> req,
        @SignalRConnectionInfoInput(
            name = "connectionInfo",
            hubName = "chat",
            userId = "{userId}") SignalRConnectionInfo connectionInfo) {

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