Support customSocketOverride value for websocket. Closes #2225
This commit is contained in:
parent
0c127a65ce
commit
e75b20d6ca
@ -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) {
|
||||
|
@ -16,6 +16,7 @@ export interface ClientConfig {
|
||||
federation: Federation;
|
||||
notifications: Notifications;
|
||||
authentication: Authentication;
|
||||
socketHostOverride?: string;
|
||||
}
|
||||
|
||||
interface Authentication {
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user