Держите SignalR подключенным и способным получать сообщения, когда приложение находится в фоновом режиме - PullRequest
0 голосов
/ 21 мая 2019

Мой клиент / сервер SignalR работает в основном так, как мне нужно, и теперь мне нужно, чтобы клиент оставался подключенным, даже когда приложение находится в фоновом режиме.Я занимался этим около недели, и, похоже, ничто из того, что я делаю, не дает мне покоя.Я использую Xamarin (c #) для Visual Studio 2017, и для этой конкретной платформы не так много информации, поэтому, если кто-то может помочь, пожалуйста, сделайте это.Мой код клиента:

public sealed class Client
{
    private string username = "";
    private string _platform = "";
    private readonly HubConnection _connection;
    private readonly IHubProxy _proxy;

    public string _Username
    {
        get { return username; }
        set { username = value; }
    }

    public string _Platform
    {
        get { return _platform; }
        set { _platform = value; }
    }

    public event EventHandler<string> OnMessageReceived;
    public static Client instance = null;

    public Client(string name, string username, string firstname, string lastname, string company, string department, string section)
    {
        _Username = username;
        _Platform = name;
        _platform = _Platform;

        Dictionary<string, string> queryString = new Dictionary<string, string>();
        queryString.Add("username", username);
        queryString.Add("firstname", firstname);
        queryString.Add("lastname", lastname);
        queryString.Add("company", company);
        queryString.Add("department", department);
        queryString.Add("section", section);

        _connection = new HubConnection("https://www.example.com/SignalRhub",queryString );

        _proxy = _connection.CreateHubProxy("chathub");
    }

    public static Client Getinstance(string name, string username, string firstname, string lastname)
    {
        // create the instance only if the instance is null
        if (instance == null)
        {
            // The username and user's name are set before instantiation
            instance = new Client(name, username, firstname, lastname,"","","");
        }
        // Otherwise return the already existing instance
        return instance;
    }
    public async Task Connect()
    {

        await _connection.Start(); //.ContinueWith._connection.server.registerMeAs("");
        _proxy.On("broadcastMessage", (string platform, string message) =>
        {
            if (OnMessageReceived != null)
                OnMessageReceived(this, string.Format("{0}: {1}", platform, message));
        });

    }

    public async Task<List<string>> ConnectedUsers()
    {

        List<string> Users = await _proxy.Invoke<List<string>>("getConnectedUsers");

        return Users;
    }

    public async Task<List<string>> ConnectedDeptUsers(string company, string dept, string section, string username)
    {

        List<string> Users = await _proxy.Invoke<List<string>>("getConnectedSectionUsers",company, dept, section, username);

        return Users;
    }

    public Task Send(string message)
    {
        return _proxy.Invoke("Send", _platform, message);
    }

    public Task SendSectionMessage(string company, string dept, string section, string name, string message)
    {
        return _proxy.Invoke("messageSection", company,  dept,  section,  name,  message);
    }

    public Task SendCompanyMessage(string company, string dept, string section, string name, string message)
    {
        return _proxy.Invoke("messageCompany", company, dept, message);
    }
}

У меня есть работа, которую мне все еще нужно выполнить на клиенте, но мне нужно, чтобы эта последняя часть продолжалась, если я не могу заставить ее работать в фоновом режиме, я могу 'не используй его.

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