Подключение к концентратору SignalR в Unity3d (для Hololens)

Можно ли подключиться к серверу SignalR с помощью Unity?

Я делаю приложение Hololens (поэтому я создаю приложение для магазина Windows), которому необходимо взаимодействовать с концентратором SignalR для публикации информации. Этот сервер уже создан, и у меня есть только URI, имя хаба и конечные точки интерфейса хаба.

Current issues:

  • Платформе SignalR требуется .net 4.5, с которой текущая моноверсия Unity не работает. Даже если мне удастся получить ссылку, Unity не сможет встроить ее в приложение для магазина Windows, поскольку Unity возвращает версию решений к подмножеству единства 3.5, которое не включает асинхронную функциональность, представленную в .net 4.0.
  • https://github.com/robink-teleopti/SignalR просто взорвался ошибками в единстве.
  • https://github.com/jenyayel/SignalR.Client.20 lacks a bunch of definitions in Thread, Stream, LongLength, HTTPWebRequest.
  • Nivot.SignalR.Client.Net35 uses async functionality that Unity doesn't understand.


  • person Piees    schedule 13.02.2017    source источник


    Ответы (1)


    Вы можете подключиться из приложения UW для подключения к signalR и использовать мост для связи с приложением Unity:

    Мост (приложение/веб-сервер):

    internal class UnityBridge
    {
        private static UnityBridge _instance;
    
        private UnityBridge()
        {
            SelectHandler.SelectedHandler = CallExternal;
        }
    
        public static UnityBridge Create()
        {
            return _instance ?? (_instance = new UnityBridge());
        }
    
        private void CallExternal(string nameTag)
        {
            var conn = new HubConnection("http://xxx.azurewebsites.net");
            var proxy = conn.CreateHubProxy("MyHub");
            conn.Start().Wait();
            proxy.Invoke("Send", new EngineerAction {ExecutedAction = nameTag});
        }
    }
    

    (приложение/веб-сервер) В вашем App.cs

        private AppCallbacks m_AppCallbacks;
        private UnityBridge _unityBridge;
    
        public App()
        {
            m_AppCallbacks = new AppCallbacks();
    
            // Allow clients of this class to append their own callbacks.
            AddAppCallbacks(m_AppCallbacks);
        }
    
        virtual protected void AddAppCallbacks(AppCallbacks appCallbacks)
        {
            _unityBridge = UnityBridge.Create();
    
        }
    

    (игровой клиент/сервер Unity) И в ваших сценариях единства:

    public class SelectHandler : MonoBehaviour
    {
        public delegate void SelectedHandlerDelegate(string nameTag);
        public static SelectedHandlerDelegate SelectedHandler;
        ....
    
            //call 
            UnityEngine.WSA.Application.InvokeOnUIThread(() => SelectedHandler("teststring"), false);
    
    person Peter    schedule 13.02.2017
    comment
    Большое спасибо, @Peter! Это звучит как отличная идея, хотя мне это и не по плечу, но я попытаюсь реализовать ее в своем решении, чтобы посмотреть, работает ли она. - person Piees; 13.02.2017
    comment
    @Piees, у тебя получилось? Также интересует SignalR для Hololens. - person salle55; 21.03.2017
    comment
    Я этого не делал, и модуль был отложен, я обновлю, если активирую модуль и решу его. - person Piees; 22.03.2017