public sendMessage()

in packages/sdk/src/internal/protocols/protocol.ts [76:122]


	public sendMessage(
		message: Message,
		promise?: ExportedPromise,
		timeoutSeconds?: number,
		serializedMessage?: Buffer
	) {
		message.id = message.id ?? newGuid();

		// Run message through all the middlewares
		const middlewares = this.middlewares.slice();
		for (const middleware of middlewares) {
			if (middleware.beforeSend) {
				message = middleware.beforeSend(message, promise);
				if (!message) {
					if (promise && promise.reject) {
						promise.reject();
					}
					return;
				}
			}
		}

		const setReplyTimeout = () => {
			if (timeoutSeconds > 0) {
				return setTimeout(() => {
					const reason = `${this.name} timed out awaiting response for ${message.payload.type}, ` +
						`id:${message.id}.`;
					log.error('network', reason);
					this.rejectPromiseForMessage(message.id, reason);
					this.conn.close();
				}, timeoutSeconds * 1000);
			}
		};

		// Save the reply callback
		if (promise) {
			this.promises.set(message.id, {
				promise,
				timeout: setReplyTimeout()
			});
		}

		log.verbose('network', `${this.name} send id:${message.id.substr(0, 8)}, type:${message.payload.type}`);
		log.verbose('network-content', JSON.stringify(message, (key, value) => filterEmpty(value)));

		this.conn.send(message, serializedMessage);
	}