SignalR асинхронное подключение + Unity3D

387
14 мая 2017, 21:35

Пытаюсь разобраться с тем, как выполнить асинхронное подключение к хабу в SignalR. Изначально использовал такой код:

public static void ConnectSignalR()
{
    Debug.Log("Starting SignalR...");
    if (_chatHubConnection == null)
    { 
        _chatHubConnection = new HubConnection(ServerURL);
        _chatHubConnection.Error += _chatHubConnection_Error;
        Debug.Log("Connection to " + ServerURL + " complete.");
        _hubProxy = _chatHubConnection.CreateProxy("ChatHub");
        Debug.Log("Proxy created.");
        stateSub = _hubProxy.Subscribe("CatchState");
        stateSub.Data += GetMessage;
        exSub = _hubProxy.Subscribe("HandleException");
        exSub.Data += GetMessage;
        _chatHubConnection.Start();
        Debug.Log("Started!");
    }
}

Проблема в том, что пока идет попытка подключения к хабу, Unity зависает полностью, невозможно воспроизвести анимацию ожидания или вообще какое-либо действие сделать. Я хочу попытаться запустить метод подключения асинхронно, но во-первых, никогда с этим не сталкивался, во-вторых в Unity не поддерживается асинхронность (насколько мне известно). Предположительно код будет выглядеть так (тестировал в консольном клиенте - работает), но насколько это правильно мне неизвестно:

public static async Task ConnectingAsync()
{
    _hubConnection = new HubConnection(connectionUrl);
    await _hubConnection.Start().ContinueWith(task =>
    {
        if (task.IsFaulted)
        {
            Console.WriteLine("Failed!");
            Console.ReadLine();
        }
        else
        {
            Console.WriteLine("Connected!");
            Console.ReadLine();
        }
    });
    hub = _hubConnection.CreateHubProxy("ChatHub");
    hub.On<string>("HandleException", message => HandleException(message));
    hub.On<string>("CatchState", message => Console.WriteLine(message));
}

Собственно, помогите разобраться, что и как нужно сделать.

UPD. Сам код на Unity:

private static HubConnection _chatHubConnection = null;
public static IHubProxy _hubProxy;
private void Start()
{
    StartCoroutine(OnStart());
}
IEnumerator OnStart()
{
    yield return new WaitForSeconds(2f);
    Debug.Log("Starting SignalR...");
    if (_chatHubConnection == null)
    {
        _chatHubConnection = new HubConnection(ServerURL);
        _chatHubConnection.Start();
        _chatHubConnection.Error += _chatHubConnection_Error;
        Debug.Log("Connection to " + ServerURL + " complete.");
        _hubProxy = _chatHubConnection.CreateProxy("ChatHub");
        Debug.Log("Proxy created.");
        _chatHubConnection.Start();
        Debug.Log("Started!");
    }
}
READ ALSO
Чтение Excel файла взять данные из колонки

Чтение Excel файла взять данные из колонки

Возникла проблема с чтением excel файла, мне нужно взять данные из колонки с определенным именем

304
Как обозначить pictureBox на переднем плане?

Как обозначить pictureBox на переднем плане?

Проблема в том, что при повторном запуске приложения (с защитой от повторного запуска), каким-то образом теряются правила расположения pictureBox,...

236
C# программы на Windows XP

C# программы на Windows XP

Будут ли работать программы написанные на c# (Visual Studio 2012) на ОС Windows XP? Какую версию NET Framework поддерживает XP без дополнительных установок ?

352
byte array to sha256 c#

byte array to sha256 c#

Нужно передать byte[] array в функцию sha256

266