Используя Saturn Framework, как я могу получить ссылку на концентратор Websockets вне определенного запроса? - PullRequest
2 голосов
/ 22 марта 2020

Я создаю приложение для игрушечной задачи, чтобы узнать больше о SAFE. У меня есть некоторые фоновые процессы, работающие на стороне сервера, и иногда им нужно отправлять сообщение без ответа подключенным клиентам. Это означает, что мне нужна ссылка на SocketHub извне любого конкретного запроса.

В настоящее время у меня есть изменяемая переменная, которой я передаю значение при присоединении к каналу:

let mainChannel = channel {
    join (fun ctx socketId ->
        task {
        printfn "Connected! Main Socket Id: %O" socketId
        let hub = ctx.GetService<Channels.ISocketHub>()

        webSocketHub <- Some hub // Passing the reference to a mutable variable

        task {
            do! Task.Delay 500
            let m = (socketId |> (SetChannelSocketId >> GameData))
            do! (harderSendMessage socketId "message" m "Problem sending SocketId")
            } |> ignore
        return Channels.Ok })
}

Тем не менее, мне кажется, что должен быть лучший способ получить доступ к концентратору - я просто не могу понять это.

...