nitro-renderer/src/nitro/session/RoomSession.ts

464 lines
12 KiB
TypeScript

import { IConnection, IRoomSession, RoomControllerLevel, RoomTradingLevelEnum } from '../../api';
import { Disposable } from '../../core';
import { RoomSessionEvent } from '../../events';
import { BotRemoveComposer, ChangeQueueMessageComposer, CompostPlantMessageComposer, FurnitureMultiStateComposer, GetPetCommandsComposer, HarvestPetMessageComposer, MoodlightSettingsComposer, MoodlightSettingsSaveComposer, MoodlightTogggleStateComposer, NewUserExperienceScriptProceedComposer, OpenPetPackageMessageComposer, OpenPresentComposer, PeerUsersClassificationMessageComposer, PetMountComposer, PetRemoveComposer, PollAnswerComposer, PollRejectComposer, PollStartComposer, RemovePetSaddleComposer, RoomAmbassadorAlertComposer, RoomBanUserComposer, RoomDoorbellAccessComposer, RoomEnterComposer, RoomGiveRightsComposer, RoomKickUserComposer, RoomModerationSettings, RoomMuteUserComposer, RoomTakeRightsComposer, RoomUnitActionComposer, RoomUnitChatComposer, RoomUnitChatShoutComposer, RoomUnitChatWhisperComposer, RoomUnitDanceComposer, RoomUnitPostureComposer, RoomUnitSignComposer, RoomUnitTypingStartComposer, RoomUnitTypingStopComposer, RoomUsersClassificationMessageComposer, SetClothingChangeDataMessageComposer, TogglePetBreedingComposer, TogglePetRidingComposer, UsePetProductComposer, UserMottoComposer, VotePollCounterMessageComposer } from '../communication';
import { UserDataManager } from './UserDataManager';
export class RoomSession extends Disposable implements IRoomSession
{
private _connection: IConnection;
private _userData: UserDataManager;
private _roomId: number;
private _password: string;
private _state: string;
private _tradeMode: number;
private _doorMode: number;
private _allowPets: boolean;
private _controllerLevel: number;
private _ownRoomIndex: number;
private _isGuildRoom: boolean;
private _isRoomOwner: boolean;
private _isDecorating: boolean;
private _isSpectator: boolean;
private _moderationSettings: RoomModerationSettings;
constructor()
{
super();
this._connection = null;
this._userData = new UserDataManager();
this._roomId = 0;
this._password = null;
this._state = RoomSessionEvent.CREATED;
this._tradeMode = RoomTradingLevelEnum.NO_TRADING;
this._doorMode = 0;
this._controllerLevel = RoomControllerLevel.NONE;
this._ownRoomIndex = -1;
this._isGuildRoom = false;
this._isRoomOwner = false;
this._isDecorating = false;
this._isSpectator = false;
this._moderationSettings = null;
}
protected onDispose(): void
{
if(this._userData)
{
this._userData.dispose();
this._userData = null;
}
this._connection = null;
}
public setConnection(connection: IConnection): void
{
if(this._connection || !connection) return;
this._connection = connection;
if(this._userData) this._userData.setConnection(connection);
}
public setControllerLevel(level: number): void
{
if((level >= RoomControllerLevel.NONE) && (level <= RoomControllerLevel.MODERATOR))
{
this._controllerLevel = level;
return;
}
this._controllerLevel = RoomControllerLevel.NONE;
}
public setOwnRoomIndex(roomIndex: number): void
{
this._ownRoomIndex = roomIndex;
}
public setRoomOwner(): void
{
this._isRoomOwner = true;
}
public start(): boolean
{
if(this._state !== RoomSessionEvent.CREATED || !this._connection) return false;
this._state = RoomSessionEvent.STARTED;
return this.enterRoom();
}
private enterRoom(): boolean
{
if(!this._connection) return false;
this._connection.send(new RoomEnterComposer(this._roomId, this._password));
return true;
}
public reset(roomId: number): void
{
if(roomId === this._roomId) return;
this._roomId = roomId;
}
public sendChatMessage(text: string, styleId: number): void
{
this._connection.send(new RoomUnitChatComposer(text, styleId));
}
public sendShoutMessage(text: string, styleId: number): void
{
this._connection.send(new RoomUnitChatShoutComposer(text, styleId));
}
public sendWhisperMessage(recipientName: string, text: string, styleId: number): void
{
this._connection.send(new RoomUnitChatWhisperComposer(recipientName, text, styleId));
}
public sendChatTypingMessage(isTyping: boolean): void
{
if(isTyping) this._connection.send(new RoomUnitTypingStartComposer());
else this._connection.send(new RoomUnitTypingStopComposer());
}
public sendMottoMessage(motto: string): void
{
this._connection.send(new UserMottoComposer(motto));
}
public sendDanceMessage(danceId: number): void
{
this._connection.send(new RoomUnitDanceComposer(danceId));
}
public sendExpressionMessage(expression: number): void
{
this._connection.send(new RoomUnitActionComposer(expression));
}
public sendSignMessage(sign: number): void
{
if((sign < 0) || (sign > 17)) return;
this._connection.send(new RoomUnitSignComposer(sign));
}
public sendPostureMessage(posture: number): void
{
this._connection.send(new RoomUnitPostureComposer(posture));
}
public sendDoorbellApprovalMessage(userName: string, flag: boolean): void
{
this._connection.send(new RoomDoorbellAccessComposer(userName, flag));
}
public sendAmbassadorAlertMessage(userId: number): void
{
this._connection.send(new RoomAmbassadorAlertComposer(userId));
}
public sendKickMessage(userId: number): void
{
this._connection.send(new RoomKickUserComposer(userId));
}
public sendMuteMessage(userId: number, minutes: number): void
{
this._connection.send(new RoomMuteUserComposer(userId, minutes, this._roomId));
}
public sendBanMessage(userId: number, type: string): void
{
this._connection.send(new RoomBanUserComposer(userId, this._roomId, type));
}
public sendGiveRightsMessage(userId: number): void
{
this._connection.send(new RoomGiveRightsComposer(userId));
}
public sendTakeRightsMessage(userId: number): void
{
this._connection.send(new RoomTakeRightsComposer(userId));
}
public sendPollStartMessage(pollId: number): void
{
this._connection.send(new PollStartComposer(pollId));
}
public sendPollRejectMessage(pollId: number): void
{
this._connection.send(new PollRejectComposer(pollId));
}
public sendPollAnswerMessage(pollId: number, questionId: number, answers: string[]): void
{
this._connection.send(new PollAnswerComposer(pollId, questionId, answers));
}
public sendPeerUsersClassificationMessage(userClassType: string): void
{
this._connection.send(new PeerUsersClassificationMessageComposer(userClassType));
}
public sendOpenPetPackageMessage(objectId: number, petName: string): void
{
this._connection.send(new OpenPetPackageMessageComposer(objectId, petName));
}
public sendRoomUsersClassificationMessage(userClassType: string): void
{
this._connection.send(new RoomUsersClassificationMessageComposer(userClassType));
}
public updateMoodlightData(id: number, effectId: number, color: number, brightness: number, apply: boolean): void
{
let colorString = '000000' + color.toString(16).toUpperCase();
colorString = '#' + colorString.substring((colorString.length - 6));
this.connection.send(new MoodlightSettingsSaveComposer(id, effectId, colorString, brightness, apply));
}
public toggleMoodlightState(): void
{
this.connection.send(new MoodlightTogggleStateComposer());
}
public pickupPet(id: number): void
{
if(!this._connection) return;
this._connection.send(new PetRemoveComposer(id));
}
public pickupBot(id: number): void
{
if(!this._connection) return;
this._connection.send(new BotRemoveComposer(id));
}
public requestMoodlightSettings(): void
{
if(!this._connection) return;
this._connection.send(new MoodlightSettingsComposer());
}
public openGift(objectId: number): void
{
this._connection.send(new OpenPresentComposer(objectId));
}
public mountPet(id: number): void
{
this._connection.send(new PetMountComposer(id, true));
}
public dismountPet(id: number): void
{
this._connection.send(new PetMountComposer(id, false));
}
public usePetProduct(itemId: number, petId: number): void
{
this._connection.send(new UsePetProductComposer(itemId, petId));
}
public removePetSaddle(id: number): void
{
this._connection.send(new RemovePetSaddleComposer(id));
}
public togglePetBreeding(id: number): void
{
this._connection.send(new TogglePetBreedingComposer(id));
}
public togglePetRiding(id: number): void
{
this._connection.send(new TogglePetRidingComposer(id));
}
public useMultistateItem(id: number): void
{
this._connection.send(new FurnitureMultiStateComposer(id));
}
public harvestPet(id: number): void
{
this._connection.send(new HarvestPetMessageComposer(id));
}
public compostPlant(id: number): void
{
this._connection.send(new CompostPlantMessageComposer(id));
}
public requestPetCommands(id: number):void
{
this._connection.send(new GetPetCommandsComposer(id));
}
public sendScriptProceed(): void
{
this._connection.send(new NewUserExperienceScriptProceedComposer());
}
public sendUpdateClothingChangeFurniture(objectId: number, gender: string, look: string):void
{
this._connection.send(new SetClothingChangeDataMessageComposer(objectId, gender, look));
}
public changeQueue(targetQueue: number): void
{
this._connection.send(new ChangeQueueMessageComposer(targetQueue));
}
public votePoll(counter: number): void
{
this._connection.send(new VotePollCounterMessageComposer(counter));
}
public get connection(): IConnection
{
return this._connection;
}
public get userDataManager(): UserDataManager
{
return this._userData;
}
public get roomId(): number
{
return this._roomId;
}
public set roomId(roomId: number)
{
this._roomId = roomId;
}
public get password(): string
{
return this._password;
}
public set password(password: string)
{
this._password = password;
}
public get state(): string
{
return this._state;
}
public get isPrivateRoom(): boolean
{
return true;
}
public get tradeMode(): number
{
return this._tradeMode;
}
public set tradeMode(mode: number)
{
this._tradeMode = mode;
}
public get doorMode(): number
{
return this._doorMode;
}
public set doorMode(mode: number)
{
this._doorMode = mode;
}
public get allowPets(): boolean
{
return this._allowPets;
}
public set allowPets(flag: boolean)
{
this._allowPets = flag;
}
public get controllerLevel(): number
{
return this._controllerLevel;
}
public get ownRoomIndex(): number
{
return this._ownRoomIndex;
}
public get isGuildRoom(): boolean
{
return this._isGuildRoom;
}
public set isGuildRoom(flag: boolean)
{
this._isGuildRoom = flag;
}
public get isRoomOwner(): boolean
{
return this._isRoomOwner;
}
public get isDecorating(): boolean
{
return this._isDecorating;
}
public set isDecorating(flag: boolean)
{
this._isDecorating = flag;
}
public get isSpectator(): boolean
{
return this._isSpectator;
}
public set isSpectator(flag: boolean)
{
this._isSpectator = flag;
}
public get moderationSettings(): RoomModerationSettings
{
return this._moderationSettings;
}
public set moderationSettings(parser: RoomModerationSettings)
{
this._moderationSettings = parser;
}
}