a few fixes and improvements
This commit is contained in:
parent
7d30426a08
commit
ba3ce91410
8 changed files with 53 additions and 7 deletions
|
@ -37,6 +37,7 @@ export interface MSAgentInitMessage extends MSAgentProtocolMessage {
|
|||
data: {
|
||||
username: string
|
||||
agent: string
|
||||
charlimit: number
|
||||
users: {
|
||||
username: string,
|
||||
agent: string
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
host = "127.0.0.1"
|
||||
port = 3000
|
||||
|
||||
[chat]
|
||||
charlimit = 100
|
||||
|
||||
[tts]
|
||||
enabled = true
|
||||
# https://git.computernewb.com/computernewb/SAPIServer
|
||||
|
|
|
@ -41,6 +41,10 @@ export class Client extends EventEmitter {
|
|||
|
||||
send(msg: MSAgentProtocolMessage) {
|
||||
return new Promise<void>((res, rej) => {
|
||||
if (this.socket.readyState !== WebSocket.OPEN) {
|
||||
res();
|
||||
return;
|
||||
}
|
||||
this.socket.send(JSON.stringify(msg), err => {
|
||||
if (err) {
|
||||
rej(err);
|
||||
|
@ -66,7 +70,15 @@ export class Client extends EventEmitter {
|
|||
this.socket.close();
|
||||
return;
|
||||
}
|
||||
this.username = htmlentities.encode(joinMsg.data.username);
|
||||
let username = htmlentities.encode(joinMsg.data.username);
|
||||
if (this.room.clients.some(u => u.username === username)) {
|
||||
let i = 1;
|
||||
let uo = username;
|
||||
do {
|
||||
username = uo + i++;
|
||||
} while (this.room.clients.some(u => u.username === username))
|
||||
}
|
||||
this.username = username;
|
||||
this.agent = htmlentities.encode(joinMsg.data.agent);
|
||||
this.emit('join');
|
||||
break;
|
||||
|
@ -76,7 +88,8 @@ export class Client extends EventEmitter {
|
|||
if (!talkMsg.data || !talkMsg.data.msg) {
|
||||
return;
|
||||
}
|
||||
this.emit('talk', htmlentities.encode(talkMsg.data.msg));
|
||||
if (talkMsg.data.msg.length > this.room.config.charlimit) return;
|
||||
this.emit('talk', talkMsg.data.msg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ export interface IConfig {
|
|||
host: string;
|
||||
port: number;
|
||||
}
|
||||
chat: ChatConfig;
|
||||
tts: TTSConfig
|
||||
}
|
||||
|
||||
|
@ -13,3 +14,7 @@ export interface TTSConfig {
|
|||
tempDir: string;
|
||||
wavExpirySeconds: number;
|
||||
}
|
||||
|
||||
export interface ChatConfig {
|
||||
charlimit: number;
|
||||
}
|
|
@ -7,6 +7,8 @@ import * as toml from 'toml';
|
|||
import { IConfig } from './config.js';
|
||||
import * as fs from 'fs';
|
||||
import { TTSClient } from './tts.js';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
let config: IConfig;
|
||||
let configPath: string;
|
||||
|
@ -36,15 +38,23 @@ app.register(FastifyWS);
|
|||
|
||||
let tts = null;
|
||||
|
||||
app.register(FastifyStatic, {
|
||||
root: path.dirname(fileURLToPath(import.meta.url)) + "/../../webapp/dist/",
|
||||
prefix: "/",
|
||||
decorateReply: true
|
||||
});
|
||||
|
||||
if (config.tts.enabled) {
|
||||
tts = new TTSClient(config.tts);
|
||||
app.register(FastifyStatic, {
|
||||
root: config.tts.tempDir,
|
||||
prefix: "/api/tts/"
|
||||
prefix: "/api/tts/",
|
||||
decorateReply: false
|
||||
});
|
||||
}
|
||||
|
||||
let room = new MSAgentChatRoom(tts);
|
||||
|
||||
let room = new MSAgentChatRoom(config.chat, tts);
|
||||
|
||||
app.register(async app => {
|
||||
app.get("/socket", {websocket: true}, (socket, req) => {
|
||||
|
|
|
@ -1,13 +1,18 @@
|
|||
import { MSAgentAddUserMessage, MSAgentChatMessage, MSAgentInitMessage, MSAgentProtocolMessage, MSAgentProtocolMessageType, MSAgentRemoveUserMessage } from "@msagent-chat/protocol";
|
||||
import { Client } from "./client.js";
|
||||
import { TTSClient } from "./tts.js";
|
||||
import { ChatConfig } from "./config.js";
|
||||
import * as htmlentities from 'html-entities';
|
||||
|
||||
export class MSAgentChatRoom {
|
||||
clients: Client[];
|
||||
tts: TTSClient | null;
|
||||
msgId : number = 0;
|
||||
constructor(tts: TTSClient | null) {
|
||||
config: ChatConfig;
|
||||
|
||||
constructor(config: ChatConfig, tts: TTSClient | null) {
|
||||
this.clients = [];
|
||||
this.config = config;
|
||||
this.tts = tts;
|
||||
}
|
||||
|
||||
|
@ -32,6 +37,7 @@ export class MSAgentChatRoom {
|
|||
data: {
|
||||
username: client.username!,
|
||||
agent: client.agent!,
|
||||
charlimit: this.config.charlimit,
|
||||
users: this.clients.filter(c => c.username !== null).map(c => {
|
||||
return {
|
||||
username: c.username!,
|
||||
|
@ -57,7 +63,7 @@ export class MSAgentChatRoom {
|
|||
op: MSAgentProtocolMessageType.Chat,
|
||||
data: {
|
||||
username: client.username!,
|
||||
message
|
||||
message: htmlentities.encode(message)
|
||||
}
|
||||
};
|
||||
if (this.tts !== null) {
|
||||
|
|
|
@ -16,6 +16,7 @@ export class MSAgentClient {
|
|||
private events: Emitter;
|
||||
private users: User[];
|
||||
private playingAudio: Map<string, HTMLAudioElement> = new Map();
|
||||
private charlimit: number = 0;
|
||||
|
||||
private username: string | null = null;
|
||||
private agent: string | null = null;
|
||||
|
@ -99,6 +100,10 @@ export class MSAgentClient {
|
|||
this.send(talkMsg);
|
||||
}
|
||||
|
||||
getCharlimit() {
|
||||
return this.charlimit;
|
||||
}
|
||||
|
||||
private handleMessage(data: string) {
|
||||
let msg: MSAgentProtocolMessage;
|
||||
try {
|
||||
|
@ -112,6 +117,7 @@ export class MSAgentClient {
|
|||
let initMsg = msg as MSAgentInitMessage;
|
||||
this.username = initMsg.data.username;
|
||||
this.agent = initMsg.data.agent;
|
||||
this.charlimit = initMsg.data.charlimit;
|
||||
this.users.push(...initMsg.data.users.map(u => new User(u.username, u.agent)));
|
||||
this.events.emit('join');
|
||||
break;
|
||||
|
@ -119,6 +125,7 @@ export class MSAgentClient {
|
|||
case MSAgentProtocolMessageType.AddUser: {
|
||||
let addUserMsg = msg as MSAgentAddUserMessage
|
||||
let user = new User(addUserMsg.data.username, addUserMsg.data.agent);
|
||||
this.users.push(user);
|
||||
this.events.emit('adduser', user);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -39,9 +39,10 @@ elements.chatSendBtn.addEventListener('click', () => {
|
|||
});
|
||||
|
||||
async function connectToRoom() {
|
||||
Room = new MSAgentClient("http://127.0.0.1:3000");
|
||||
Room = new MSAgentClient(`${window.location.protocol}//${window.location.host}`);
|
||||
await Room.connect();
|
||||
await Room.join(elements.logonUsername.value, "test");
|
||||
elements.chatInput.maxLength = Room.getCharlimit();
|
||||
logonWindow.hide();
|
||||
elements.logonView.style.display = "none";
|
||||
elements.chatView.style.display = "block";
|
||||
|
|
Loading…
Reference in a new issue