ServerFactory to be used to create server instances for Flipper to use

Summary:
ServerController creates, configures, and contains any necessary servers to be used by Flipper.

ServerFactory is added as a means to abstract the creation of servers from it.

Reviewed By: passy

Differential Revision: D29987328

fbshipit-source-id: ff60a408710dbd51ea28ff27a9f85c0020741f4b
This commit is contained in:
Lorenzo Blasa
2021-07-30 05:06:49 -07:00
committed by Facebook GitHub Bot
parent fcaeebefb6
commit 0f37d488bb

View File

@@ -0,0 +1,87 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
import {SecureServerConfig} from '../utils/CertificateProvider';
import ServerAdapter, {ServerEventsListener} from './ServerAdapter';
import ServerRSocket from './ServerRSocket';
import ServerWebSocketBrowser from './ServerWebSocketBrowser';
function _createServer(listener: ServerEventsListener) {
/**
* GK could be setup or queried to determine whether to use RSocket or
* WebSocket. Default is RSocket, but the stage is set for different type
* of communication channels.
*/
return new ServerRSocket(listener);
}
/**
* Creates a server to be used by Flipper. The created server will be set into
* the promise once it has started and bound to the specified port.
* @param port A port number in which to listen for incoming connections.
* @param listener An object implementing the ServerEventsListener interface.
* @param sslConfig An SSL configuration for TLS servers.
*/
export function createServer(
port: number,
listener: ServerEventsListener,
sslConfig?: SecureServerConfig,
): Promise<ServerAdapter> {
return new Promise((resolve, reject) => {
const server = _createServer(listener);
server
.start(port, sslConfig)
.then((started) => {
if (started) {
resolve(server);
} else {
reject(
new Error(`An error occurred whilst trying
to start the server listening at port ${port}`),
);
}
})
.catch((error: any) => {
reject(error);
});
});
}
/**
* Creates a server to be used by Flipper to allow Browser connections.
* The protocol is slightly different for Browser connections hence a different
* factory method. The created server will be set into the promise
* once it has started and bound to the specified port.
* @param port A port number in which to listen for incoming connections.
* @param listener An object implementing the ServerEventsListener interface.
* @returns
*/
export function createBrowserServer(
port: number,
listener: ServerEventsListener,
): Promise<ServerAdapter> {
return new Promise((resolve, reject) => {
const server = new ServerWebSocketBrowser(listener);
server
.start(port)
.then((started) => {
if (started) {
resolve(server);
} else {
reject(
new Error(`An error occurred whilst trying
to start the server listening at port ${port}`),
);
}
})
.catch((error: any) => {
reject(error);
});
});
}