Account for active group members
This commit is contained in:
@@ -5,5 +5,7 @@ lib/
|
||||
tools/
|
||||
example/
|
||||
docs/
|
||||
test/
|
||||
.npmignore
|
||||
dist/tests/
|
||||
.npmignore
|
||||
.gitignore
|
||||
caspertech-node-metaverse-*.tgz
|
||||
10
dist/classes/Agent.d.ts
vendored
10
dist/classes/Agent.d.ts
vendored
@@ -17,7 +17,14 @@ export declare class Agent {
|
||||
regionAccess: string;
|
||||
agentAccess: string;
|
||||
currentRegion: Region;
|
||||
chatSessions: string[];
|
||||
chatSessions: {
|
||||
[key: string]: {
|
||||
[key: string]: {
|
||||
hasVoice: boolean;
|
||||
isModerator: boolean;
|
||||
};
|
||||
};
|
||||
};
|
||||
controlFlags: ControlFlags;
|
||||
openID: {
|
||||
'token'?: string;
|
||||
@@ -56,6 +63,7 @@ export declare class Agent {
|
||||
agentUpdateTimer: number | null;
|
||||
private clientEvents;
|
||||
constructor(clientEvents: ClientEvents);
|
||||
getSessionAgentCount(uuid: UUID): number;
|
||||
addChatSession(uuid: UUID): void;
|
||||
hasChatSession(uuid: UUID): boolean;
|
||||
setCurrentRegion(region: Region): void;
|
||||
|
||||
33
dist/classes/Agent.js
vendored
33
dist/classes/Agent.js
vendored
@@ -21,7 +21,7 @@ const Utils_1 = require("./Utils");
|
||||
class Agent {
|
||||
constructor(clientEvents) {
|
||||
this.localID = 0;
|
||||
this.chatSessions = [];
|
||||
this.chatSessions = {};
|
||||
this.controlFlags = 0;
|
||||
this.openID = {};
|
||||
this.buddyList = [];
|
||||
@@ -31,16 +31,41 @@ class Agent {
|
||||
this.agentUpdateTimer = null;
|
||||
this.inventory = new Inventory_1.Inventory(clientEvents);
|
||||
this.clientEvents = clientEvents;
|
||||
this.clientEvents.onGroupChatAgentListUpdate.subscribe((event) => {
|
||||
const str = event.groupID.toString();
|
||||
if (this.chatSessions[str] === undefined) {
|
||||
this.chatSessions[str] = {};
|
||||
}
|
||||
const agent = event.agentID.toString();
|
||||
if (event.entered) {
|
||||
this.chatSessions[str][agent] = {
|
||||
hasVoice: event.canVoiceChat,
|
||||
isModerator: event.isModerator
|
||||
};
|
||||
}
|
||||
else {
|
||||
delete this.chatSessions[str][agent];
|
||||
}
|
||||
});
|
||||
}
|
||||
getSessionAgentCount(uuid) {
|
||||
const str = uuid.toString();
|
||||
if (this.chatSessions[str] === undefined) {
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return Object.keys(this.chatSessions[str]).length;
|
||||
}
|
||||
}
|
||||
addChatSession(uuid) {
|
||||
const str = uuid.toString();
|
||||
if (this.chatSessions.indexOf(str) === -1) {
|
||||
this.chatSessions.push(str);
|
||||
if (this.chatSessions[str] === undefined) {
|
||||
this.chatSessions[str] = {};
|
||||
}
|
||||
}
|
||||
hasChatSession(uuid) {
|
||||
const str = uuid.toString();
|
||||
if (this.chatSessions.indexOf(str) === -1) {
|
||||
if (this.chatSessions[str] === undefined) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
2
dist/classes/Agent.js.map
vendored
2
dist/classes/Agent.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/classes/ClientEvents.d.ts
vendored
2
dist/classes/ClientEvents.d.ts
vendored
@@ -8,6 +8,7 @@ import { FriendRequestEvent } from '../events/FriendRequestEvent';
|
||||
import { DisconnectEvent } from '../events/DisconnectEvent';
|
||||
import { GroupChatEvent } from '../events/GroupChatEvent';
|
||||
import { GroupChatSessionJoinEvent } from '../events/GroupChatSessionJoinEvent';
|
||||
import { GroupChatSessionAgentListEvent } from '../events/GroupChatSessionAgentListEvent';
|
||||
export declare class ClientEvents {
|
||||
onNearbyChat: Subject<ChatEvent>;
|
||||
onInstantMessage: Subject<InstantMessageEvent>;
|
||||
@@ -19,4 +20,5 @@ export declare class ClientEvents {
|
||||
onCircuitLatency: Subject<number>;
|
||||
onGroupChat: Subject<GroupChatEvent>;
|
||||
onGroupChatSessionJoin: Subject<GroupChatSessionJoinEvent>;
|
||||
onGroupChatAgentListUpdate: Subject<GroupChatSessionAgentListEvent>;
|
||||
}
|
||||
|
||||
1
dist/classes/ClientEvents.js
vendored
1
dist/classes/ClientEvents.js
vendored
@@ -13,6 +13,7 @@ class ClientEvents {
|
||||
this.onCircuitLatency = new Subject_1.Subject();
|
||||
this.onGroupChat = new Subject_1.Subject();
|
||||
this.onGroupChatSessionJoin = new Subject_1.Subject();
|
||||
this.onGroupChatAgentListUpdate = new Subject_1.Subject();
|
||||
}
|
||||
}
|
||||
exports.ClientEvents = ClientEvents;
|
||||
|
||||
2
dist/classes/ClientEvents.js.map
vendored
2
dist/classes/ClientEvents.js.map
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"ClientEvents.js","sourceRoot":"","sources":["../../lib/classes/ClientEvents.ts"],"names":[],"mappings":";;AAGA,0CAAqC;AAQrC;IAAA;QAEI,iBAAY,GAAuB,IAAI,iBAAO,EAAa,CAAC;QAC5D,qBAAgB,GAAiC,IAAI,iBAAO,EAAuB,CAAC;QACpF,kBAAa,GAA8B,IAAI,iBAAO,EAAoB,CAAC;QAC3E,oBAAe,GAAgC,IAAI,iBAAO,EAAsB,CAAC;QACjF,WAAM,GAAuB,IAAI,iBAAO,EAAa,CAAC;QACtD,oBAAe,GAA2B,IAAI,iBAAO,EAAiB,CAAC;QACvE,mBAAc,GAA8B,IAAI,iBAAO,EAAmB,CAAC;QAC3E,qBAAgB,GAAoB,IAAI,iBAAO,EAAU,CAAC;QAC1D,gBAAW,GAA4B,IAAI,iBAAO,EAAkB,CAAC;QACrE,2BAAsB,GAAuC,IAAI,iBAAO,EAA6B,CAAC;IAC1G,CAAC;CAAA;AAZD,oCAYC"}
|
||||
{"version":3,"file":"ClientEvents.js","sourceRoot":"","sources":["../../lib/classes/ClientEvents.ts"],"names":[],"mappings":";;AAGA,0CAAqC;AASrC;IAAA;QAEI,iBAAY,GAAuB,IAAI,iBAAO,EAAa,CAAC;QAC5D,qBAAgB,GAAiC,IAAI,iBAAO,EAAuB,CAAC;QACpF,kBAAa,GAA8B,IAAI,iBAAO,EAAoB,CAAC;QAC3E,oBAAe,GAAgC,IAAI,iBAAO,EAAsB,CAAC;QACjF,WAAM,GAAuB,IAAI,iBAAO,EAAa,CAAC;QACtD,oBAAe,GAA2B,IAAI,iBAAO,EAAiB,CAAC;QACvE,mBAAc,GAA8B,IAAI,iBAAO,EAAmB,CAAC;QAC3E,qBAAgB,GAAoB,IAAI,iBAAO,EAAU,CAAC;QAC1D,gBAAW,GAA4B,IAAI,iBAAO,EAAkB,CAAC;QACrE,2BAAsB,GAAuC,IAAI,iBAAO,EAA6B,CAAC;QACtG,+BAA0B,GAA4C,IAAI,iBAAO,EAAkC,CAAC;IACxH,CAAC;CAAA;AAbD,oCAaC"}
|
||||
21
dist/classes/EventQueueClient.js
vendored
21
dist/classes/EventQueueClient.js
vendored
@@ -9,6 +9,7 @@ const TeleportEventType_1 = require("../enums/TeleportEventType");
|
||||
const GroupChatEvent_1 = require("../events/GroupChatEvent");
|
||||
const UUID_1 = require("./UUID");
|
||||
const GroupChatSessionJoinEvent_1 = require("../events/GroupChatSessionJoinEvent");
|
||||
const GroupChatSessionAgentListEvent_1 = require("../events/GroupChatSessionAgentListEvent");
|
||||
class EventQueueClient {
|
||||
constructor(agent, caps, clientEvents) {
|
||||
this.done = false;
|
||||
@@ -96,6 +97,26 @@ class EventQueueClient {
|
||||
}
|
||||
case 'ChatterBoxSessionAgentListUpdates':
|
||||
{
|
||||
if (event['body']) {
|
||||
if (event['body']['agent_updates']) {
|
||||
Object.keys(event['body']['agent_updates']).forEach((agentUpdate) => {
|
||||
const updObj = event['body']['agent_updates'][agentUpdate];
|
||||
const gcsale = new GroupChatSessionAgentListEvent_1.GroupChatSessionAgentListEvent();
|
||||
gcsale.agentID = new UUID_1.UUID(agentUpdate);
|
||||
gcsale.groupID = new UUID_1.UUID(event['body']['session_id'].toString());
|
||||
gcsale.canVoiceChat = false;
|
||||
gcsale.isModerator = false;
|
||||
gcsale.entered = (updObj['transition'] === 'ENTER');
|
||||
if (updObj['can_voice_chat'] === true) {
|
||||
gcsale.canVoiceChat = true;
|
||||
}
|
||||
if (updObj['is_moderator'] === true) {
|
||||
gcsale.isModerator = true;
|
||||
}
|
||||
this.clientEvents.onGroupChatAgentListUpdate.next(gcsale);
|
||||
});
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'TeleportFinish':
|
||||
|
||||
2
dist/classes/EventQueueClient.js.map
vendored
2
dist/classes/EventQueueClient.js.map
vendored
File diff suppressed because one or more lines are too long
@@ -14,5 +14,5 @@ export declare class CommunicationsCommands extends CommandsBase {
|
||||
typeInstantMessage(to: UUID | string, message: string, thinkingTime?: number, charactersPerSecond?: number): Promise<void>;
|
||||
typeLocalMessage(message: string, thinkingTime?: number, charactersPerSecond?: number): Promise<void>;
|
||||
startGroupChatSession(sessionID: UUID | string, message: string): Promise<void>;
|
||||
sendGroupMessage(groupID: UUID | string, message: string): Promise<void>;
|
||||
sendGroupMessage(groupID: UUID | string, message: string): Promise<number>;
|
||||
}
|
||||
|
||||
@@ -316,7 +316,9 @@ class CommunicationsCommands extends CommandsBase_1.CommandsBase {
|
||||
EstateID: 0
|
||||
};
|
||||
const sequenceNo = circuit.sendMessage(im, PacketFlags_1.PacketFlags.Reliable);
|
||||
return circuit.waitForAck(sequenceNo, 10000);
|
||||
return this.circuit.waitForAck(sequenceNo, 10000);
|
||||
}).then(() => {
|
||||
resolve(this.bot.clientCommands.group.getSessionAgentCount(groupID));
|
||||
}).catch((err) => {
|
||||
reject(err);
|
||||
});
|
||||
|
||||
File diff suppressed because one or more lines are too long
1
dist/classes/commands/GroupCommands.d.ts
vendored
1
dist/classes/commands/GroupCommands.d.ts
vendored
@@ -9,6 +9,7 @@ export declare class GroupCommands extends CommandsBase {
|
||||
avatarID: UUID | string;
|
||||
roleID: UUID | string | undefined;
|
||||
}[]): Promise<void>;
|
||||
getSessionAgentCount(sessionID: UUID | string): number;
|
||||
sendGroupInvite(groupID: UUID | string, to: UUID | string, role: UUID | string | undefined): Promise<void>;
|
||||
acceptGroupInvite(event: GroupInviteEvent): Promise<void>;
|
||||
rejectGroupInvite(event: GroupInviteEvent): Promise<void>;
|
||||
|
||||
6
dist/classes/commands/GroupCommands.js
vendored
6
dist/classes/commands/GroupCommands.js
vendored
@@ -77,6 +77,12 @@ class GroupCommands extends CommandsBase_1.CommandsBase {
|
||||
const sequenceNo = this.circuit.sendMessage(igr, PacketFlags_1.PacketFlags.Reliable);
|
||||
return this.circuit.waitForAck(sequenceNo, 10000);
|
||||
}
|
||||
getSessionAgentCount(sessionID) {
|
||||
if (typeof sessionID === 'string') {
|
||||
sessionID = new UUID_1.UUID(sessionID);
|
||||
}
|
||||
return this.agent.getSessionAgentCount(sessionID);
|
||||
}
|
||||
sendGroupInvite(groupID, to, role) {
|
||||
const sendTo = [{
|
||||
avatarID: to,
|
||||
|
||||
2
dist/classes/commands/GroupCommands.js.map
vendored
2
dist/classes/commands/GroupCommands.js.map
vendored
File diff suppressed because one or more lines are too long
8
dist/events/GroupChatSessionAgentListEvent.d.ts
vendored
Normal file
8
dist/events/GroupChatSessionAgentListEvent.d.ts
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
import { UUID } from '../classes/UUID';
|
||||
export declare class GroupChatSessionAgentListEvent {
|
||||
groupID: UUID;
|
||||
agentID: UUID;
|
||||
isModerator: boolean;
|
||||
canVoiceChat: boolean;
|
||||
entered: boolean;
|
||||
}
|
||||
6
dist/events/GroupChatSessionAgentListEvent.js
vendored
Normal file
6
dist/events/GroupChatSessionAgentListEvent.js
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class GroupChatSessionAgentListEvent {
|
||||
}
|
||||
exports.GroupChatSessionAgentListEvent = GroupChatSessionAgentListEvent;
|
||||
//# sourceMappingURL=GroupChatSessionAgentListEvent.js.map
|
||||
1
dist/events/GroupChatSessionAgentListEvent.js.map
vendored
Normal file
1
dist/events/GroupChatSessionAgentListEvent.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"GroupChatSessionAgentListEvent.js","sourceRoot":"","sources":["../../lib/events/GroupChatSessionAgentListEvent.ts"],"names":[],"mappings":";;AAEA;CAOC;AAPD,wEAOC"}
|
||||
11
dist/index.d.ts
vendored
11
dist/index.d.ts
vendored
@@ -10,4 +10,13 @@ import { ChatSourceType } from './enums/ChatSourceType';
|
||||
import { BotOptionFlags } from './enums/BotOptionFlags';
|
||||
import { UUID } from './classes/UUID';
|
||||
import { Vector3 } from './classes/Vector3';
|
||||
export { Bot, LoginParameters, AssetType, HTTPAssets, ClientEvents, BVH, InstantMessageEvent, InstantMessageEventFlags, ChatSourceType, BotOptionFlags, UUID, Vector3 };
|
||||
import { ChatEvent } from './events/ChatEvent';
|
||||
import { GroupInviteEvent } from './events/GroupInviteEvent';
|
||||
import { FriendRequestEvent } from './events/FriendRequestEvent';
|
||||
import { LureEvent } from './events/LureEvent';
|
||||
import { TeleportEvent } from './events/TeleportEvent';
|
||||
import { DisconnectEvent } from './events/DisconnectEvent';
|
||||
import { GroupChatEvent } from './events/GroupChatEvent';
|
||||
import { GroupChatSessionJoinEvent } from './events/GroupChatSessionJoinEvent';
|
||||
import { GroupChatSessionAgentListEvent } from './events/GroupChatSessionAgentListEvent';
|
||||
export { Bot, LoginParameters, AssetType, HTTPAssets, ClientEvents, BVH, InstantMessageEvent, InstantMessageEventFlags, ChatSourceType, BotOptionFlags, UUID, Vector3, ChatEvent, GroupInviteEvent, FriendRequestEvent, LureEvent, TeleportEvent, DisconnectEvent, GroupChatEvent, GroupChatSessionJoinEvent, GroupChatSessionAgentListEvent };
|
||||
|
||||
18
dist/index.js
vendored
18
dist/index.js
vendored
@@ -24,4 +24,22 @@ const UUID_1 = require("./classes/UUID");
|
||||
exports.UUID = UUID_1.UUID;
|
||||
const Vector3_1 = require("./classes/Vector3");
|
||||
exports.Vector3 = Vector3_1.Vector3;
|
||||
const ChatEvent_1 = require("./events/ChatEvent");
|
||||
exports.ChatEvent = ChatEvent_1.ChatEvent;
|
||||
const GroupInviteEvent_1 = require("./events/GroupInviteEvent");
|
||||
exports.GroupInviteEvent = GroupInviteEvent_1.GroupInviteEvent;
|
||||
const FriendRequestEvent_1 = require("./events/FriendRequestEvent");
|
||||
exports.FriendRequestEvent = FriendRequestEvent_1.FriendRequestEvent;
|
||||
const LureEvent_1 = require("./events/LureEvent");
|
||||
exports.LureEvent = LureEvent_1.LureEvent;
|
||||
const TeleportEvent_1 = require("./events/TeleportEvent");
|
||||
exports.TeleportEvent = TeleportEvent_1.TeleportEvent;
|
||||
const DisconnectEvent_1 = require("./events/DisconnectEvent");
|
||||
exports.DisconnectEvent = DisconnectEvent_1.DisconnectEvent;
|
||||
const GroupChatEvent_1 = require("./events/GroupChatEvent");
|
||||
exports.GroupChatEvent = GroupChatEvent_1.GroupChatEvent;
|
||||
const GroupChatSessionJoinEvent_1 = require("./events/GroupChatSessionJoinEvent");
|
||||
exports.GroupChatSessionJoinEvent = GroupChatSessionJoinEvent_1.GroupChatSessionJoinEvent;
|
||||
const GroupChatSessionAgentListEvent_1 = require("./events/GroupChatSessionAgentListEvent");
|
||||
exports.GroupChatSessionAgentListEvent = GroupChatSessionAgentListEvent_1.GroupChatSessionAgentListEvent;
|
||||
//# sourceMappingURL=index.js.map
|
||||
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AAmBtB,cAnBI,SAAG,CAmBJ;AAlBP,+DAA0D;AAmBtD,0BAnBI,iCAAe,CAmBJ;AAlBnB,yDAAoD;AAqBhD,uBArBI,2BAAY,CAqBJ;AApBhB,uCAAkC;AAqB9B,cArBI,SAAG,CAqBJ;AAhBP,iDAA4C;AAaxC,oBAbI,qBAAS,CAaJ;AAZb,mDAA8C;AAa1C,qBAbI,uBAAU,CAaJ;AAZd,+EAA0E;AAgBtE,mCAhBI,mDAAwB,CAgBJ;AAf5B,sEAAiE;AAc7D,8BAdI,yCAAmB,CAcJ;AAbvB,2DAAsD;AAelD,yBAfI,+BAAc,CAeJ;AAdlB,2DAAsD;AAelD,yBAfI,+BAAc,CAeJ;AAdlB,yCAAoC;AAehC,eAfI,WAAI,CAeJ;AAdR,+CAA0C;AAetC,kBAfI,iBAAO,CAeJ"}
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AA2BtB,cA3BI,SAAG,CA2BJ;AA1BP,+DAA0D;AA2BtD,0BA3BI,iCAAe,CA2BJ;AA1BnB,yDAAoD;AA6BhD,uBA7BI,2BAAY,CA6BJ;AA5BhB,uCAAkC;AA6B9B,cA7BI,SAAG,CA6BJ;AAxBP,iDAA4C;AAqBxC,oBArBI,qBAAS,CAqBJ;AApBb,mDAA8C;AAqB1C,qBArBI,uBAAU,CAqBJ;AApBd,+EAA0E;AAwBtE,mCAxBI,mDAAwB,CAwBJ;AAvB5B,sEAAiE;AAsB7D,8BAtBI,yCAAmB,CAsBJ;AArBvB,2DAAsD;AAuBlD,yBAvBI,+BAAc,CAuBJ;AAtBlB,2DAAsD;AAuBlD,yBAvBI,+BAAc,CAuBJ;AAtBlB,yCAAoC;AAuBhC,eAvBI,WAAI,CAuBJ;AAtBR,+CAA0C;AAuBtC,kBAvBI,iBAAO,CAuBJ;AAtBX,kDAA6C;AAuBzC,oBAvBI,qBAAS,CAuBJ;AAtBb,gEAA2D;AAuBvD,2BAvBI,mCAAgB,CAuBJ;AAtBpB,oEAA+D;AAuB3D,6BAvBI,uCAAkB,CAuBJ;AAtBtB,kDAA6C;AAuBzC,oBAvBI,qBAAS,CAuBJ;AAtBb,0DAAqD;AAuBjD,wBAvBI,6BAAa,CAuBJ;AAtBjB,8DAAyD;AAuBrD,0BAvBI,iCAAe,CAuBJ;AAtBnB,4DAAuD;AAuBnD,yBAvBI,+BAAc,CAuBJ;AAtBlB,kFAA6E;AAuBzE,oCAvBI,qDAAyB,CAuBJ;AAtB7B,4FAAuF;AAuBnF,yCAvBI,+DAA8B,CAuBJ"}
|
||||
@@ -74,7 +74,10 @@ bot.clientEvents.onGroupChat.subscribe((GroupChatEvent) =>
|
||||
{
|
||||
let ping = uuid.v4();
|
||||
pings[ping] = Math.floor(new Date().getTime());
|
||||
bot.clientCommands.comms.sendGroupMessage(GroupChatEvent.groupID, 'ping '+ping);
|
||||
bot.clientCommands.comms.sendGroupMessage(GroupChatEvent.groupID, 'ping '+ping).then((memberCount) =>
|
||||
{
|
||||
console.log('Group message sent to ' + memberCount + ' members');
|
||||
});
|
||||
}
|
||||
else if (GroupChatEvent.from.toString() === loginResponse.agent.agentID.toString())
|
||||
{
|
||||
|
||||
@@ -25,6 +25,7 @@ import {Utils} from './Utils';
|
||||
import {AgentAnimationMessage} from './messages/AgentAnimation';
|
||||
import {ClientEvents} from './ClientEvents';
|
||||
import {IGameObject} from './interfaces/IGameObject';
|
||||
import {GroupChatSessionAgentListEvent} from '../events/GroupChatSessionAgentListEvent';
|
||||
|
||||
export class Agent
|
||||
{
|
||||
@@ -36,7 +37,12 @@ export class Agent
|
||||
regionAccess: string;
|
||||
agentAccess: string;
|
||||
currentRegion: Region;
|
||||
chatSessions: string[] = [];
|
||||
chatSessions: {[key: string]: {
|
||||
[key: string]: {
|
||||
hasVoice: boolean,
|
||||
isModerator: boolean
|
||||
}
|
||||
}} = {};
|
||||
controlFlags: ControlFlags = 0;
|
||||
openID: {
|
||||
'token'?: string,
|
||||
@@ -79,21 +85,56 @@ export class Agent
|
||||
{
|
||||
this.inventory = new Inventory(clientEvents);
|
||||
this.clientEvents = clientEvents;
|
||||
this.clientEvents.onGroupChatAgentListUpdate.subscribe((event: GroupChatSessionAgentListEvent) =>
|
||||
{
|
||||
const str = event.groupID.toString();
|
||||
if (this.chatSessions[str] === undefined)
|
||||
{
|
||||
this.chatSessions[str] = {};
|
||||
}
|
||||
|
||||
const agent = event.agentID.toString();
|
||||
|
||||
if (event.entered)
|
||||
{
|
||||
this.chatSessions[str][agent] = {
|
||||
hasVoice: event.canVoiceChat,
|
||||
isModerator: event.isModerator
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
delete this.chatSessions[str][agent];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
getSessionAgentCount(uuid: UUID): number
|
||||
{
|
||||
const str = uuid.toString();
|
||||
if (this.chatSessions[str] === undefined)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return Object.keys(this.chatSessions[str]).length;
|
||||
}
|
||||
}
|
||||
|
||||
addChatSession(uuid: UUID)
|
||||
{
|
||||
const str = uuid.toString();
|
||||
if (this.chatSessions.indexOf(str) === -1)
|
||||
if (this.chatSessions[str] === undefined)
|
||||
{
|
||||
this.chatSessions.push(str);
|
||||
this.chatSessions[str] = {};
|
||||
}
|
||||
}
|
||||
|
||||
hasChatSession(uuid: UUID): boolean
|
||||
{
|
||||
const str = uuid.toString();
|
||||
if (this.chatSessions.indexOf(str) === -1)
|
||||
if (this.chatSessions[str] === undefined)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import {FriendRequestEvent} from '../events/FriendRequestEvent';
|
||||
import {DisconnectEvent} from '../events/DisconnectEvent';
|
||||
import {GroupChatEvent} from '../events/GroupChatEvent';
|
||||
import {GroupChatSessionJoinEvent} from '../events/GroupChatSessionJoinEvent';
|
||||
import {GroupChatSessionAgentListEvent} from '../events/GroupChatSessionAgentListEvent';
|
||||
|
||||
export class ClientEvents
|
||||
{
|
||||
@@ -21,4 +22,5 @@ export class ClientEvents
|
||||
onCircuitLatency: Subject<number> = new Subject<number>();
|
||||
onGroupChat: Subject<GroupChatEvent> = new Subject<GroupChatEvent>();
|
||||
onGroupChatSessionJoin: Subject<GroupChatSessionJoinEvent> = new Subject<GroupChatSessionJoinEvent>();
|
||||
onGroupChatAgentListUpdate: Subject<GroupChatSessionAgentListEvent> = new Subject<GroupChatSessionAgentListEvent>();
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import {Utils} from './Utils';
|
||||
import {UUID} from './UUID';
|
||||
import {Agent} from './Agent';
|
||||
import {GroupChatSessionJoinEvent} from '../events/GroupChatSessionJoinEvent';
|
||||
import {GroupChatSessionAgentListEvent} from '../events/GroupChatSessionAgentListEvent';
|
||||
|
||||
export class EventQueueClient
|
||||
{
|
||||
@@ -310,7 +311,32 @@ export class EventQueueClient
|
||||
}
|
||||
case 'ChatterBoxSessionAgentListUpdates':
|
||||
{
|
||||
// TODO
|
||||
if (event['body'])
|
||||
{
|
||||
if (event['body']['agent_updates'])
|
||||
{
|
||||
Object.keys(event['body']['agent_updates']).forEach((agentUpdate) =>
|
||||
{
|
||||
const updObj = event['body']['agent_updates'][agentUpdate];
|
||||
const gcsale = new GroupChatSessionAgentListEvent();
|
||||
gcsale.agentID = new UUID(agentUpdate);
|
||||
gcsale.groupID = new UUID(event['body']['session_id'].toString());
|
||||
gcsale.canVoiceChat = false;
|
||||
gcsale.isModerator = false;
|
||||
gcsale.entered = (updObj['transition'] === 'ENTER');
|
||||
|
||||
if (updObj['can_voice_chat'] === true)
|
||||
{
|
||||
gcsale.canVoiceChat = true;
|
||||
}
|
||||
if (updObj['is_moderator'] === true)
|
||||
{
|
||||
gcsale.isModerator = true;
|
||||
}
|
||||
this.clientEvents.onGroupChatAgentListUpdate.next(gcsale);
|
||||
});
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'TeleportFinish':
|
||||
|
||||
@@ -358,9 +358,9 @@ export class CommunicationsCommands extends CommandsBase
|
||||
});
|
||||
}
|
||||
|
||||
sendGroupMessage(groupID: UUID | string, message: string): Promise<void>
|
||||
sendGroupMessage(groupID: UUID | string, message: string): Promise<number>
|
||||
{
|
||||
return new Promise<void>((resolve, reject) =>
|
||||
return new Promise<number>((resolve, reject) =>
|
||||
{
|
||||
this.startGroupChatSession(groupID, message).then(() =>
|
||||
{
|
||||
@@ -393,7 +393,10 @@ export class CommunicationsCommands extends CommandsBase
|
||||
EstateID: 0
|
||||
};
|
||||
const sequenceNo = circuit.sendMessage(im, PacketFlags.Reliable);
|
||||
return circuit.waitForAck(sequenceNo, 10000);
|
||||
return this.circuit.waitForAck(sequenceNo, 10000);
|
||||
}).then(() =>
|
||||
{
|
||||
resolve(this.bot.clientCommands.group.getSessionAgentCount(groupID))
|
||||
}).catch((err) =>
|
||||
{
|
||||
reject(err);
|
||||
|
||||
@@ -98,6 +98,15 @@ export class GroupCommands extends CommandsBase
|
||||
return this.circuit.waitForAck(sequenceNo, 10000);
|
||||
}
|
||||
|
||||
getSessionAgentCount(sessionID: UUID | string): number
|
||||
{
|
||||
if (typeof sessionID === 'string')
|
||||
{
|
||||
sessionID = new UUID(sessionID);
|
||||
}
|
||||
return this.agent.getSessionAgentCount(sessionID);
|
||||
}
|
||||
|
||||
sendGroupInvite(groupID: UUID | string, to: UUID | string, role: UUID | string | undefined): Promise<void>
|
||||
{
|
||||
const sendTo = [{
|
||||
|
||||
10
lib/events/GroupChatSessionAgentListEvent.ts
Normal file
10
lib/events/GroupChatSessionAgentListEvent.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import {UUID} from '../classes/UUID';
|
||||
|
||||
export class GroupChatSessionAgentListEvent
|
||||
{
|
||||
groupID: UUID;
|
||||
agentID: UUID;
|
||||
isModerator: boolean;
|
||||
canVoiceChat: boolean;
|
||||
entered: boolean;
|
||||
}
|
||||
21
lib/index.ts
21
lib/index.ts
@@ -14,7 +14,15 @@ import {ChatSourceType} from './enums/ChatSourceType';
|
||||
import {BotOptionFlags} from './enums/BotOptionFlags';
|
||||
import {UUID} from './classes/UUID';
|
||||
import {Vector3} from './classes/Vector3';
|
||||
|
||||
import {ChatEvent} from './events/ChatEvent';
|
||||
import {GroupInviteEvent} from './events/GroupInviteEvent';
|
||||
import {FriendRequestEvent} from './events/FriendRequestEvent';
|
||||
import {LureEvent} from './events/LureEvent';
|
||||
import {TeleportEvent} from './events/TeleportEvent';
|
||||
import {DisconnectEvent} from './events/DisconnectEvent';
|
||||
import {GroupChatEvent} from './events/GroupChatEvent';
|
||||
import {GroupChatSessionJoinEvent} from './events/GroupChatSessionJoinEvent';
|
||||
import {GroupChatSessionAgentListEvent} from './events/GroupChatSessionAgentListEvent';
|
||||
|
||||
export {
|
||||
Bot,
|
||||
@@ -28,5 +36,14 @@ export {
|
||||
ChatSourceType,
|
||||
BotOptionFlags,
|
||||
UUID,
|
||||
Vector3
|
||||
Vector3,
|
||||
ChatEvent,
|
||||
GroupInviteEvent,
|
||||
FriendRequestEvent,
|
||||
LureEvent,
|
||||
TeleportEvent,
|
||||
DisconnectEvent,
|
||||
GroupChatEvent,
|
||||
GroupChatSessionJoinEvent,
|
||||
GroupChatSessionAgentListEvent
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user