You've already forked Nitro_Render_V3
mirror of
https://github.com/duckietm/Nitro_Render_V3.git
synced 2026-06-19 15:06:20 +00:00
feat(messenger): typing packets (ConsoleTyping + FriendTyping)
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -114,6 +114,7 @@ export class IncomingHeader
|
||||
public static MESSENGER_SEARCH = 973;
|
||||
public static MESSENGER_UPDATE = 2800;
|
||||
public static CONSOLE_READ_RECEIPT = 4086;
|
||||
public static FRIEND_TYPING = 4088;
|
||||
public static MODERATION_REPORT_DISABLED = 1651;
|
||||
public static MODERATION_TOOL = 2696;
|
||||
public static MODERATION_USER_INFO = 2866;
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import { IMessageEvent } from '@nitrots/api';
|
||||
import { MessageEvent } from '@nitrots/events';
|
||||
import { FriendIsTypingParser } from '../../parser';
|
||||
|
||||
export class FriendIsTypingEvent extends MessageEvent implements IMessageEvent
|
||||
{
|
||||
constructor(callBack: Function)
|
||||
{
|
||||
super(callBack, FriendIsTypingParser);
|
||||
}
|
||||
|
||||
public getParser(): FriendIsTypingParser
|
||||
{
|
||||
return this.parser as FriendIsTypingParser;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
export * from './AcceptFriendResultEvent';
|
||||
export * from './ConsoleReadReceiptEvent';
|
||||
export * from './FriendIsTypingEvent';
|
||||
export * from './FindFriendsProcessResultEvent';
|
||||
export * from './FollowFriendFailedEvent';
|
||||
export * from './FriendListFragmentEvent';
|
||||
|
||||
@@ -130,6 +130,7 @@ export class OutgoingHeader
|
||||
public static REMOVE_FRIEND_CATEGORY = 4083;
|
||||
public static MOVE_FRIEND_TO_CATEGORY = 4084;
|
||||
public static MARK_CONSOLE_READ = 4085;
|
||||
public static CONSOLE_TYPING = 4087;
|
||||
public static MOD_TOOL_USER_INFO = 3295;
|
||||
public static GET_USER_FLAT_CATS = 3027;
|
||||
public static NAVIGATOR_INIT = 2110;
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
import { IMessageComposer } from '@nitrots/api';
|
||||
|
||||
export class ConsoleTypingComposer implements IMessageComposer<ConstructorParameters<typeof ConsoleTypingComposer>>
|
||||
{
|
||||
private _data: ConstructorParameters<typeof ConsoleTypingComposer>;
|
||||
|
||||
constructor(peerId: number, isTyping: boolean)
|
||||
{
|
||||
this._data = [ peerId, isTyping ];
|
||||
}
|
||||
|
||||
public getMessageArray()
|
||||
{
|
||||
return this._data;
|
||||
}
|
||||
|
||||
public dispose(): void
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
export * from './AcceptFriendMessageComposer';
|
||||
export * from './MarkConsoleReadComposer';
|
||||
export * from './ConsoleTypingComposer';
|
||||
export * from './AddFriendCategoryComposer';
|
||||
export * from './DeclineFriendMessageComposer';
|
||||
export * from './FindNewFriendsMessageComposer';
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
import { IMessageDataWrapper, IMessageParser } from '@nitrots/api';
|
||||
|
||||
export class FriendIsTypingParser implements IMessageParser
|
||||
{
|
||||
private _senderId: number;
|
||||
private _isTyping: boolean;
|
||||
|
||||
public flush(): boolean
|
||||
{
|
||||
this._senderId = 0;
|
||||
this._isTyping = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public parse(wrapper: IMessageDataWrapper): boolean
|
||||
{
|
||||
if(!wrapper) return false;
|
||||
|
||||
this._senderId = wrapper.readInt();
|
||||
this._isTyping = wrapper.readBoolean();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public get senderId(): number
|
||||
{
|
||||
return this._senderId;
|
||||
}
|
||||
|
||||
public get isTyping(): boolean
|
||||
{
|
||||
return this._isTyping;
|
||||
}
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { BinaryReader, BinaryWriter } from '@nitrots/utils';
|
||||
import { FriendIsTypingParser } from '../FriendIsTypingParser';
|
||||
|
||||
class TestWrapper
|
||||
{
|
||||
constructor(private reader: BinaryReader) {}
|
||||
readByte() { return this.reader.readByte(); }
|
||||
readBoolean() { return this.reader.readByte() === 1; }
|
||||
readShort() { return this.reader.readShort(); }
|
||||
readInt() { return this.reader.readInt(); }
|
||||
readString() { const len = this.reader.readShort(); return this.reader.readBytes(len).toString(); }
|
||||
header = 0;
|
||||
get bytesAvailable() { return this.reader.remaining() > 0; }
|
||||
}
|
||||
|
||||
describe('FriendIsTypingParser', () =>
|
||||
{
|
||||
it('parses senderId + isTyping=true', () =>
|
||||
{
|
||||
const w = new BinaryWriter();
|
||||
w.writeInt(42); w.writeByte(1);
|
||||
const parser = new FriendIsTypingParser();
|
||||
parser.flush();
|
||||
parser.parse(new TestWrapper(new BinaryReader(w.getBuffer())) as any);
|
||||
expect(parser.senderId).toBe(42);
|
||||
expect(parser.isTyping).toBe(true);
|
||||
});
|
||||
|
||||
it('parses isTyping=false', () =>
|
||||
{
|
||||
const w = new BinaryWriter();
|
||||
w.writeInt(42); w.writeByte(0);
|
||||
const parser = new FriendIsTypingParser();
|
||||
parser.flush();
|
||||
parser.parse(new TestWrapper(new BinaryReader(w.getBuffer())) as any);
|
||||
expect(parser.isTyping).toBe(false);
|
||||
});
|
||||
});
|
||||
@@ -1,5 +1,6 @@
|
||||
export * from './AcceptFriendFailureData';
|
||||
export * from './ConsoleReadReceiptParser';
|
||||
export * from './FriendIsTypingParser';
|
||||
export * from './AcceptFriendResultParser';
|
||||
export * from './FindFriendsProcessResultParser';
|
||||
export * from './FollowFriendFailedParser';
|
||||
|
||||
Reference in New Issue
Block a user