UNPKG

lavva.exalushome

Version:

Library implementing communication and abstraction layers for ExalusHome system

149 lines 6.28 kB
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