Мой клиент / сервер 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);
}
}
У меня есть работа, которую мне все еще нужно выполнить на клиенте, но мне нужно, чтобы эта последняя часть продолжалась, если я не могу заставить ее работать в фоновом режиме, я могу 'не используй его.