Support customSocketOverride value for websocket. Closes #2225
This commit is contained in:
@@ -21,7 +21,7 @@ import {
|
|||||||
MessageVisibilityEvent,
|
MessageVisibilityEvent,
|
||||||
SocketEvent,
|
SocketEvent,
|
||||||
} from '../../interfaces/socket-events';
|
} from '../../interfaces/socket-events';
|
||||||
|
import { mergeMeta } from '../../utils/helpers';
|
||||||
import handleConnectedClientInfoMessage from './eventhandlers/connected-client-info-handler';
|
import handleConnectedClientInfoMessage from './eventhandlers/connected-client-info-handler';
|
||||||
import ServerStatusService from '../../services/status-service';
|
import ServerStatusService from '../../services/status-service';
|
||||||
import handleNameChangeEvent from './eventhandlers/handleNameChangeEvent';
|
import handleNameChangeEvent from './eventhandlers/handleNameChangeEvent';
|
||||||
@@ -148,17 +148,6 @@ export const visibleChatMessagesSelector = selector<ChatMessage[]>({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// Take a nested object of state metadata and merge it into
|
|
||||||
// a single flattened node.
|
|
||||||
function mergeMeta(meta) {
|
|
||||||
return Object.keys(meta).reduce((acc, key) => {
|
|
||||||
const value = meta[key];
|
|
||||||
Object.assign(acc, value);
|
|
||||||
|
|
||||||
return acc;
|
|
||||||
}, {});
|
|
||||||
}
|
|
||||||
|
|
||||||
export const ClientConfigStore: FC = () => {
|
export const ClientConfigStore: FC = () => {
|
||||||
const [appState, appStateSend, appStateService] = useMachine(appStateModel);
|
const [appState, appStateSend, appStateService] = useMachine(appStateModel);
|
||||||
const [currentUser, setCurrentUser] = useRecoilState(currentUserAtom);
|
const [currentUser, setCurrentUser] = useRecoilState(currentUserAtom);
|
||||||
@@ -324,7 +313,9 @@ export const ClientConfigStore: FC = () => {
|
|||||||
|
|
||||||
const startChat = async () => {
|
const startChat = async () => {
|
||||||
try {
|
try {
|
||||||
ws = new WebsocketService(accessToken, '/ws');
|
const { socketHostOverride } = clientConfig;
|
||||||
|
const host = socketHostOverride || window.location.toString();
|
||||||
|
ws = new WebsocketService(accessToken, '/ws', host);
|
||||||
ws.handleMessage = handleMessage;
|
ws.handleMessage = handleMessage;
|
||||||
setWebsocketService(ws);
|
setWebsocketService(ws);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ export interface ClientConfig {
|
|||||||
federation: Federation;
|
federation: Federation;
|
||||||
notifications: Notifications;
|
notifications: Notifications;
|
||||||
authentication: Authentication;
|
authentication: Authentication;
|
||||||
|
socketHostOverride?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Authentication {
|
interface Authentication {
|
||||||
|
|||||||
@@ -20,24 +20,20 @@ export default class WebsocketService {
|
|||||||
|
|
||||||
handleMessage?: (message: SocketEvent) => void;
|
handleMessage?: (message: SocketEvent) => void;
|
||||||
|
|
||||||
constructor(accessToken, path) {
|
constructor(accessToken, path, host) {
|
||||||
this.accessToken = accessToken;
|
this.accessToken = accessToken;
|
||||||
this.path = path;
|
this.path = path;
|
||||||
this.websocketReconnectTimer = null;
|
this.websocketReconnectTimer = null;
|
||||||
|
|
||||||
// this.send = this.send.bind(this);
|
|
||||||
this.createAndConnect = this.createAndConnect.bind(this);
|
|
||||||
// this.scheduleReconnect = this.scheduleReconnect.bind(this);
|
|
||||||
// this.onError = this.onError.bind(this);
|
|
||||||
this.shutdown = this.shutdown.bind(this);
|
|
||||||
|
|
||||||
this.isShutdown = false;
|
this.isShutdown = false;
|
||||||
|
|
||||||
this.createAndConnect();
|
this.createAndConnect = this.createAndConnect.bind(this);
|
||||||
|
this.shutdown = this.shutdown.bind(this);
|
||||||
|
|
||||||
|
this.createAndConnect(host);
|
||||||
}
|
}
|
||||||
|
|
||||||
createAndConnect() {
|
createAndConnect(host) {
|
||||||
const url = new URL(window.location.toString());
|
const url = new URL(host);
|
||||||
url.protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
|
url.protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
|
||||||
url.pathname = '/ws';
|
url.pathname = '/ws';
|
||||||
url.port = window.location.port === '3000' ? '8080' : window.location.port;
|
url.port = window.location.port === '3000' ? '8080' : window.location.port;
|
||||||
|
|||||||
Reference in New Issue
Block a user