sendEvent(ctx) {
		const groups = ctx.eventGroups;
		const requestID = ctx.requestID ? "with requestID '" + ctx.requestID + "' " : "";
		if (ctx.endpoint)
			this.logger.debug(
				`=> Send '${ctx.eventName}' event ${requestID}to '${ctx.nodeID}' node` +
					(groups ? ` in '${groups.join(", ")}' group(s)` : "") +
					"."
			);
		else
			this.logger.debug(
				`=> Send '${ctx.eventName}' event ${requestID}to '${groups.join(", ")}' group(s).`
			);

		return this.publish(
			new Packet(P.PACKET_EVENT, ctx.endpoint ? ctx.nodeID : null, {
				id: ctx.id,
				event: ctx.eventName,
				data: ctx.params,
				groups,
				broadcast: ctx.eventType == "broadcast",
				meta: ctx.meta,
				level: ctx.level,
				tracing: ctx.tracing,
				parentID: ctx.parentID,
				requestID: ctx.requestID,
				caller: ctx.caller,
				needAck: ctx.needAck
			})
		).catch(
			/* istanbul ignore next */ err => {
				this.logger.error(
					`Unable to send '${ctx.eventName}' event ${requestID}to groups.`,
					err
				);

				this.broker.broadcastLocal("$transit.error", {
					error: err,
					module: "transit",
					type: C.FAILED_SEND_EVENT_PACKET
				});
			}
		);
	}
Send an event to a remote node.
The event is balanced by transporter

@param {Context} ctx

@memberof Transit