UNPKG

lavva.exalushome

Version:

Library implementing communication and abstraction layers for ExalusHome system

226 lines 9.21 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, ControllerMessageActions, ControllerMessageSource, ControllerMessageType } from "./IControllerChat"; export class ControllerChat { constructor() { this._chatSubscriptions = []; this._connection = Api.Get(ExalusConnectionService.ServiceName); let removeSubCallback = this._connection.SubscribeTo("/homemessaging/notify/message/new", (frame) => { const data = frame.Data; //messages for 'family' chat if (data.RecipientUserGuid == null && data.MessageType == ControllerMessageType.Message) return; const res = new ControllerChatMessage(); res.DateTime = data.DateTime; res.Guid = data.Guid; res.MessageSource = data.MessageSource; res.MessageText = data.MessageText; res.MessageType = data.MessageType; res.RecipientUserGuid = data.RecipientUserGuid ? data.RecipientUserGuid : "n/a"; res.Sender = data.Sender; res.SenderName = data.SenderName ? data.SenderName : "n/a"; res.SenderUserGuid = data.SenderUserGuid ? data.SenderUserGuid : "n/a"; res.TextToSpeechMessage = data.TextToSpeechMessage ? data.TextToSpeechMessage : ""; for (let [k, v] of Object.entries(data.MessageActions)) res.MessageActions.set(ControllerMessageActions[k], v); for (let [k, v] of Object.entries(data.MessageActionsData)) res.MessageActionsData.set(k, v); 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 => { //messages for 'family' chat if (d.RecipientUserGuid == null && d.MessageType == ControllerMessageType.Message) return; const res = new ControllerChatMessage(); res.DateTime = d.DateTime; res.Guid = d.Guid; res.MessageSource = d.MessageSource; res.MessageText = d.MessageText; res.MessageType = d.MessageType; res.RecipientUserGuid = d.RecipientUserGuid ? d.RecipientUserGuid : "n/a"; res.Sender = d.Sender; res.SenderName = d.SenderName ? d.SenderName : "n/a"; res.SenderUserGuid = d.SenderUserGuid ? d.SenderUserGuid : "n/a"; res.TextToSpeechMessage = d.TextToSpeechMessage ? d.TextToSpeechMessage : ""; for (let [k, v] of Object.entries(d.MessageActions)) res.MessageActions.set(ControllerMessageActions[k], v); for (let [k, v] of Object.entries(d.MessageActionsData)) res.MessageActionsData.set(k, v); 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(`recipient:home ${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 ControllerChatMessage { constructor() { this._sender = ControllerChatSender.Controller; this._messageType = ControllerMessageType.Info; this._messageSource = ControllerMessageSource.Other; this._senderUserGuid = ""; this._recipientUserGuid = ""; this._textToSpeechMessage = ""; this._messageActions = new Map(); this._messageActionsData = new Map(); this._guid = ""; this._senderName = ""; this._messageText = ""; this._dateTime = new Date().toDateString(); } get Sender() { return this._sender; } get MessageType() { return this._messageType; } get MessageSource() { return this._messageSource; } get SenderUserGuid() { return this._senderUserGuid; } get RecipientUserGuid() { return this._recipientUserGuid; } get TextToSpeechMessage() { return this._textToSpeechMessage; } get MessageActions() { return this._messageActions; } get MessageActionsData() { return this._messageActionsData; } get Guid() { return this._guid; } get SenderName() { return this._senderName; } get MessageText() { return this._messageText; } get DateTime() { return this._dateTime; } set Sender(value) { this._sender = value; } set MessageType(value) { this._messageType = value; } set MessageSource(value) { this._messageSource = value; } set SenderUserGuid(value) { this._senderUserGuid = value; } set RecipientUserGuid(value) { this._recipientUserGuid = value; } set TextToSpeechMessage(value) { this._textToSpeechMessage = value; } set MessageActions(value) { this._messageActions = value; } set MessageActionsData(value) { this._messageActionsData = value; } set Guid(value) { this._guid = value; } set SenderName(value) { this._senderName = value; } set MessageText(value) { this._messageText = value; } set DateTime(value) { this._dateTime = value; } } //Requests class GetMessagesRequest extends DataFrame { constructor() { super(); this.Resource = "/homemessaging/messages"; this.Method = Method.Get; } } class SendMessagesRequest extends DataFrame { constructor(message) { super(); this.Resource = "/homemessaging/message"; this.Method = Method.Put; this.Data = message; } } //# sourceMappingURL=ControllerChat.js.map