0

Support customSocketOverride value for websocket. Closes #2225

This commit is contained in:
Gabe Kangas 2022-10-18 20:40:57 -07:00
parent 0c127a65ce
commit e75b20d6ca
No known key found for this signature in database
GPG Key ID: 9A56337728BC81EA
3 changed files with 12 additions and 24 deletions

View File

@ -21,7 +21,7 @@ import {
MessageVisibilityEvent,
SocketEvent,
} from '../../interfaces/socket-events';
import { mergeMeta } from '../../utils/helpers';
import handleConnectedClientInfoMessage from './eventhandlers/connected-client-info-handler';
import ServerStatusService from '../../services/status-service';
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 = () => {
const [appState, appStateSend, appStateService] = useMachine(appStateModel);
const [currentUser, setCurrentUser] = useRecoilState(currentUserAtom);
@ -324,7 +313,9 @@ export const ClientConfigStore: FC = () => {
const startChat = async () => {
try {
ws = new WebsocketService(accessToken, '/ws');
const { socketHostOverride } = clientConfig;
const host = socketHostOverride || window.location.toString();
ws = new WebsocketService(accessToken, '/ws', host);
ws.handleMessage = handleMessage;
setWebsocketService(ws);
} catch (error) {

View File

@ -16,6 +16,7 @@ export interface ClientConfig {
federation: Federation;
notifications: Notifications;
authentication: Authentication;
socketHostOverride?: string;
}
interface Authentication {

View File

@ -20,24 +20,20 @@ export default class WebsocketService {
handleMessage?: (message: SocketEvent) => void;
constructor(accessToken, path) {
constructor(accessToken, path, host) {
this.accessToken = accessToken;
this.path = path;
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.createAndConnect();
this.createAndConnect = this.createAndConnect.bind(this);
this.shutdown = this.shutdown.bind(this);
this.createAndConnect(host);
}
createAndConnect() {
const url = new URL(window.location.toString());
createAndConnect(host) {
const url = new URL(host);
url.protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
url.pathname = '/ws';
url.port = window.location.port === '3000' ? '8080' : window.location.port;