lavva.exalushome
Version:
Library implementing communication and abstraction layers for ExalusHome system
149 lines • 6.28 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { Api } from "../../../../Api";
import { DataFrame, Method, Status } from "../../../../DataFrame";
import { DependencyContainer } from "../../../../DependencyContainer";
import { ExalusConnectionService } from "../../../ExalusConnectionService";
import { ResponseResult } from "../../../FieldChangeResult";
import { ChatService, ChatServiceErrorCode } from "../../ChatService";
import { ControllerChatSender, ControllerMessageSource, ControllerMessageType } from "../ControllerChat/IControllerChat";
export class FamillyChat {
constructor() {
this._chatSubscriptions = [];
this._connection = Api.Get(ExalusConnectionService.ServiceName);
let removeSubCallback = this._connection.SubscribeTo("/homemessaging/notify/message/new", (frame) => {
if (frame.Resource === "/homemessaging/notify/message/new") {
const data = frame.Data;
if (data.RecipientUserGuid == null && data.MessageType == ControllerMessageType.Message) {
const res = new FamillyChatMessage();
res.DateTime = data.DateTime;
res.Guid = data.Guid;
res.MessageText = data.MessageText;
res.SenderName = data.SenderName ? data.SenderName : "n/a";
this._chatSubscriptions.forEach(handler => {
handler(res);
});
}
}
});
}
GetCachedMessagesAsync() {
return __awaiter(this, void 0, void 0, function* () {
try {
const resp = yield this._connection.SendAndWaitForResponseAsync(new GetMessagesRequest(), 12000, false);
if (resp == null)
return new ResponseResult(ChatServiceErrorCode.OtherError, `Cannot get messages - response is null.`);
if (resp.Status != Status.OK)
return new ResponseResult(ChatServiceErrorCode.OtherError, `Cannot get messages - controller responded with response code ${resp.Status}.`);
if (resp.Data == null)
return new ResponseResult(ChatServiceErrorCode.NoData, `Cannot get messages - controller responded with status OK, but response does not contain data!`);
const result = [];
resp.Data.forEach(d => {
if (d.RecipientUserGuid == null && d.MessageType == ControllerMessageType.Message) {
const res = new FamillyChatMessage();
res.DateTime = d.DateTime;
res.Guid = d.Guid;
res.MessageText = d.MessageText;
res.SenderName = d.SenderName ? d.SenderName : "n/a";
result.push(res);
}
});
return result;
}
catch (error) {
return new ResponseResult(ChatServiceErrorCode.FatalError, `Cannot get messages - exception occurred ${error}`);
}
});
}
SendMessageAsync(message) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
try {
const result = yield this._connection.SendAndWaitForResponseAsync(new SendMessagesRequest(message), 8000, false);
if (result == null || result.Status == null)
return Status.FatalError;
return result.Status;
}
catch (error) {
(_a = DependencyContainer.Log) === null || _a === void 0 ? void 0 : _a.Error(ChatService.ServiceName, `Cannot send message! ${error}`);
return Status.FatalError;
}
});
}
SubscribeToMessages(messageHandler) {
this._chatSubscriptions.push(messageHandler);
}
UnsubscribeFromMessages(messageHandler) {
if (this._chatSubscriptions)
this._chatSubscriptions = this._chatSubscriptions.filter(h => h !== messageHandler);
}
}
class ControllerChatMessageResponse {
constructor() {
this.Guid = "";
this.Sender = ControllerChatSender.Controller;
this.MessageType = ControllerMessageType.Info;
this.MessageSource = ControllerMessageSource.Other;
this.SenderUserGuid = "";
this.RecipientUserGuid = "";
this.MessageText = "";
this.TextToSpeechMessage = "";
this.SenderName = "";
this.DateTime = new Date().toDateString();
}
}
class FamillyChatMessage {
constructor() {
this._guid = "";
this._senderName = "";
this._messageText = "";
this._dateTime = "";
}
get Guid() {
return this._guid;
}
get SenderName() {
return this._senderName;
}
get MessageText() {
return this._messageText;
}
get DateTime() {
return this._dateTime;
}
set Guid(value) {
this._guid = value;
}
set SenderName(value) {
this._senderName = value;
}
set MessageText(value) {
this._messageText = value;
}
set DateTime(value) {
this._dateTime = value;
}
}
class SendMessagesRequest extends DataFrame {
constructor(message) {
super();
this.Resource = "/homemessaging/message";
this.Method = Method.Put;
this.Data = message;
}
}
class GetMessagesRequest extends DataFrame {
constructor() {
super();
this.Resource = "/homemessaging/messages";
this.Method = Method.Get;
}
}
//# sourceMappingURL=FamillyChat.js.map