Store QSS API type in global variable

This commit is contained in:
Brian Warren 2026-04-13 17:59:26 -05:00
parent 47b8b484b7
commit ef3bc125b5

View File

@ -27,15 +27,16 @@ const SIGNALR_CONNECTION_STATE_LABEL = {
4: 'Disconnected' 4: 'Disconnected'
}; };
let QSS_API_TYPE = null; // will get set to 'framework' or 'core'
// A unified wrapper to handle both Framework and Core SignalR APIs. // A unified wrapper to handle both Framework and Core SignalR APIs.
const QSS_API_WRAPPER = { const QSS_API_WRAPPER = {
connection: null, connection: null,
type: null, // 'framework' or 'core'
deviceHubProxy: null, // only populated in 'framework' deviceHubProxy: null, // only populated in 'framework'
// Map a server-side call // Map a server-side call
invokeServerMethod: function (methodName, ...args) { invokeServerMethod: function (methodName, ...args) {
if (this.type === 'framework') { if (QSS_API_TYPE === 'framework') {
// Framework API call // Framework API call
return this.deviceHubProxy.invoke(methodName, ...args); return this.deviceHubProxy.invoke(methodName, ...args);
@ -48,7 +49,7 @@ const QSS_API_WRAPPER = {
// Map a client-side listener // Map a client-side listener
onClientMethod: function (methodName, callback) { onClientMethod: function (methodName, callback) {
if (this.type === 'framework') { if (QSS_API_TYPE === 'framework') {
// Framework client-side listener // Framework client-side listener
this.deviceHubProxy.on(methodName, callback); this.deviceHubProxy.on(methodName, callback);
@ -57,7 +58,7 @@ const QSS_API_WRAPPER = {
// Core client-side listener // Core client-side listener
this.connection.on(methodName, callback); this.connection.on(methodName, callback);
} }
} },
}; };
function isNullEmptyOrWhitespace(value) { function isNullEmptyOrWhitespace(value) {
@ -81,6 +82,8 @@ async function startSignalR(callback) {
// ASP.NET Framework // ASP.NET Framework
// //
QSS_API_TYPE = 'framework';
QSS_API_WRAPPER.connection = $.hubConnection(QUERY_STRING['qssUrl'], { useDefaultPath: false }); QSS_API_WRAPPER.connection = $.hubConnection(QUERY_STRING['qssUrl'], { useDefaultPath: false });
QSS_API_WRAPPER.deviceHubProxy = QSS_API_WRAPPER.connection.createHubProxy('deviceHub'); QSS_API_WRAPPER.deviceHubProxy = QSS_API_WRAPPER.connection.createHubProxy('deviceHub');
@ -127,7 +130,6 @@ async function startSignalR(callback) {
reject(err); reject(err);
}); });
}); });
QSS_API_WRAPPER.type = 'framework';
} catch (frameworkErr) { } catch (frameworkErr) {
console.warn("Framework connection failed. Trying ASP.NET Core...", frameworkErr); console.warn("Framework connection failed. Trying ASP.NET Core...", frameworkErr);
@ -136,6 +138,8 @@ async function startSignalR(callback) {
// ASP.NET Core // ASP.NET Core
// //
QSS_API_TYPE = 'core';
QSS_API_WRAPPER.connection = new signalR.HubConnectionBuilder() QSS_API_WRAPPER.connection = new signalR.HubConnectionBuilder()
.withUrl(QUERY_STRING['qssUrl']) .withUrl(QUERY_STRING['qssUrl'])
.withAutomaticReconnect() // Required to perform automatic reconnects .withAutomaticReconnect() // Required to perform automatic reconnects
@ -158,10 +162,8 @@ async function startSignalR(callback) {
try { try {
await QSS_API_WRAPPER.connection.start(); await QSS_API_WRAPPER.connection.start();
console.log("Connected to ASP.NET Core SignalR!"); console.log("Connected to ASP.NET Core SignalR!");
QSS_API_WRAPPER.type = 'core';
} catch (coreErr) { } catch (coreErr) {
console.error("Both SignalR connection attempts failed.", coreErr); console.error("Both SignalR connection attempts failed.", coreErr);
QSS_API_WRAPPER.type = null;
} }
} }
} }