Как показать в реальном времени местоположение пользователя в SignalR? - PullRequest
3 голосов
/ 07 марта 2020

Я создаю приложение отслеживания местоположения пользователя для клиента.

Я получаю местоположение через клиента (Android) с использованием метода SignalR Hub и сохраняю в MongoDb

Мой код

public async Task UpdateLocation(double latitude, double longitude)
{
    await _mediator.Send(new UpdateLocationRequestModel()
    {
        Latitude = latitude,
        Longitude = longitude,
        UserId = Context.User.GetUserId()
    });
}

Теперь я хочу, чтобы другой Клиент (Интернет) просматривал обновления определенного пользователя c в реальном времени.

Как я могу это сделать?

Мое теоретическое решение

Я думал о создании метода в Hub, так как когда клиент (Web) нажимает кнопку, метод будет называться

public async Task ShowUser(string userId)
{
    //Add To Redis Cache ('track',userId)         
}

public async Task UpdateLocation(double latitude, double longitude)
{
    await _mediator.Send(new UpdateLocationRequestModel()
    {
        Latitude = latitude,
        Longitude = longitude,
        UserId = Context.User.GetUserId()
    });
    // Check Redis Cahce for 'track'
    // Send Data to Client(Web)
}

Я не проверял это, но есть ли лучший способ?

1 Ответ

1 голос
/ 09 марта 2020

Если вы используете только SignalR

Теоретический подход для вас без использования Redis будет следующим. Предполагая, что вы хотите отслеживать только одного пользователя за один раз

public async AddToTrackGroup(string userId) {
        return Groups.Add(Context.ConnectionId, "track-" + userId);
}

public async RemoveFromTrackGroup(string userId) {
        return Groups.Remove(Context.ConnectionId, "track-" + userId);
}

public async Task UpdateLocation(double latitude, double longitude)
{
    await _mediator.Send(new UpdateLocationRequestModel()
    {
        Latitude = latitude,
        Longitude = longitude,
        UserId = Context.User.GetUserId()
    });
    Clients.Group("track-" + Context.User.GetUserId()).updateLocation(latitude,longitude);
}

Теоретически это даст вам доступ к расположению клиентов, поскольку для этого пользователя отслеживания существует группа, и несколько клиентов также могут отслеживать этого пользователя.

Я не проверял это, но это могло бы сработать.

Если какая-либо проблема в коде или подходе исправит меня, не стесняйтесь.

Поскольку я верю, что это может помочь другим пользователей.

...