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

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

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

Актуальные вопросы:

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

  • 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) А в ваших скриптах Unity:

    public class SelectHandler : MonoBehaviour
    {
        public delegate void SelectedHandlerDelegate(string nameTag);
        public static SelectedHandlerDelegate SelectedHandler;
        ....
    
            //call 
            UnityEngine.WSA.Application.InvokeOnUIThread(() => SelectedHandler("teststring"), false);
    
    Другие вопросы по тегам