Merge pull request #31855 from AlCalzone/iobroker/message-type

[iobroker] Improve type of message payload and sendTo return type
This commit is contained in:
Sheetal Nandi
2019-01-03 09:06:08 -08:00
committed by GitHub
2 changed files with 58 additions and 12 deletions

View File

@@ -828,10 +828,12 @@ declare global {
ca: Array<string | Buffer>;
}
type MessagePayload = string | Record<string, any>;
/** Callback information for a passed message */
interface MessageCallbackInfo {
/** The original message payload */
message: string | object;
message: MessagePayload;
/** ID of this callback */
id: number;
// ???
@@ -839,14 +841,13 @@ declare global {
/** Timestamp of this message */
time: number;
}
type MessageCallback = (result?: any) => void;
/** A message being passed between adapter instances */
interface Message {
/** The command to be executed */
command: string;
/** The message payload */
message: string | object;
message: MessagePayload;
/** The source of this message */
from: string;
/** ID of this message */
@@ -1038,8 +1039,8 @@ declare global {
* @param command (optional) Command name of the target instance. Default: "send"
* @param message The message (e.g. params) to send.
*/
sendTo(instanceName: string, message: string | object, callback?: MessageCallback | MessageCallbackInfo): void;
sendTo(instanceName: string, command: string, message: string | object, callback?: MessageCallback | MessageCallbackInfo): void;
sendTo(instanceName: string, message: MessagePayload, callback?: MessageCallback | MessageCallbackInfo): void;
sendTo(instanceName: string, command: string, message: MessagePayload, callback?: MessageCallback | MessageCallbackInfo): void;
/**
* Sends a message to a specific instance or all instances of some specific adapter.
* @param instanceName The instance to send this message to.
@@ -1048,18 +1049,18 @@ declare global {
* @param command (optional) Command name of the target instance. Default: "send"
* @param message The message (e.g. params) to send.
*/
sendToAsync(instanceName: string, message: string | object): Promise<any>;
sendToAsync(instanceName: string, command: string, message: string | object): Promise<any>;
sendToAsync(instanceName: string, message: MessagePayload): Promise<Message | undefined>;
sendToAsync(instanceName: string, command: string, message: MessagePayload): Promise<Message | undefined>;
/**
* Sends a message to a specific host or all hosts.
*/
sendToHost(hostName: string, message: string | object, callback?: MessageCallback | MessageCallbackInfo): void;
sendToHost(hostName: string, command: string, message: string | object, callback?: MessageCallback | MessageCallbackInfo): void;
sendToHost(hostName: string, message: MessagePayload, callback?: MessageCallback | MessageCallbackInfo): void;
sendToHost(hostName: string, command: string, message: MessagePayload, callback?: MessageCallback | MessageCallbackInfo): void;
/**
* Sends a message to a specific host or all hosts.
*/
sendToHostAsync(hostName: string, message: string | object): Promise<any>;
sendToHostAsync(hostName: string, command: string, message: string | object): Promise<any>;
sendToHostAsync(hostName: string, message: MessagePayload): Promise<Message | undefined>;
sendToHostAsync(hostName: string, command: string, message: MessagePayload): Promise<Message | undefined>;
/** Convert ID to {device: D, channel: C, state: S} */
idToDCS(id: string): {
@@ -1591,6 +1592,8 @@ declare global {
// TODO: Redefine callbacks as subclass of GenericCallback
type GenericCallback<T> = (err: string | null, result?: T) => void;
type MessageCallback = (response?: Message) => void;
type SetObjectCallback = (err: string | null, obj: { id: string }) => void;
type GetObjectCallback = (err: string | null, obj: ioBroker.Object | null | undefined) => void;
type GetEnumCallback = (err: string | null, enums: Record<string, Enum>, requestedEnum: string) => void;

View File

@@ -99,7 +99,8 @@ function messageHandler(msg: ioBroker.Message) {
msg.callback.time.toFixed();
msg.command.toLowerCase();
msg.from.toLowerCase();
msg.message.toString();
typeof msg.message === "object" && msg.message.anything;
typeof msg.message === "string" && msg.message.toLowerCase();
}
function unloadHandler(callback: ioBroker.EmptyCallback) {
@@ -198,3 +199,45 @@ switch (adapter.log.level) {
default:
assertNever(adapter.log.level);
}
adapter.sendTo("foo.0", "command", "message");
adapter.sendTo("foo.0", "message");
adapter.sendTo("foo.0", "command", {msg: "message"});
adapter.sendTo("foo.0", {msg: "message"});
function handleMessageResponse(response?: ioBroker.Message) {
if (!response) return;
response._id.toFixed();
response.callback.ack.valueOf();
response.callback.id.toFixed();
response.callback.message.toString();
response.callback.time.toFixed();
response.command.toLowerCase();
response.from.toLowerCase();
typeof response.message === "object" && response.message.anything;
typeof response.message === "string" && response.message.toLowerCase();
}
adapter.sendTo("foo.0", "command", "message", handleMessageResponse);
adapter.sendTo("foo.0", "message", handleMessageResponse);
adapter.sendTo("foo.0", "command", {msg: "message"}, handleMessageResponse);
adapter.sendTo("foo.0", {msg: "message"}, handleMessageResponse);
adapter.sendToAsync("foo.0", "command", "message").then(handleMessageResponse);
adapter.sendToAsync("foo.0", "message").then(handleMessageResponse);
adapter.sendToAsync("foo.0", "command", {msg: "message"}).then(handleMessageResponse);
adapter.sendToAsync("foo.0", {msg: "message"}).then(handleMessageResponse);
adapter.sendToHost("host-foo", "command", "message");
adapter.sendToHost("host-foo", "message");
adapter.sendToHost("host-foo", "command", {msg: "message"});
adapter.sendToHost("host-foo", {msg: "message"});
adapter.sendToHost("host-foo", "command", "message", handleMessageResponse);
adapter.sendToHost("host-foo", "message", handleMessageResponse);
adapter.sendToHost("host-foo", "command", {msg: "message"}, handleMessageResponse);
adapter.sendToHost("host-foo", {msg: "message"}, handleMessageResponse);
adapter.sendToHostAsync("host-foo", "command", "message").then(handleMessageResponse);
adapter.sendToHostAsync("host-foo", "message").then(handleMessageResponse);
adapter.sendToHostAsync("host-foo", "command", {msg: "message"}).then(handleMessageResponse);
adapter.sendToHostAsync("host-foo", {msg: "message"}).then(handleMessageResponse);