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_SEARCH = 973;
|
||||||
public static MESSENGER_UPDATE = 2800;
|
public static MESSENGER_UPDATE = 2800;
|
||||||
public static CONSOLE_READ_RECEIPT = 4086;
|
public static CONSOLE_READ_RECEIPT = 4086;
|
||||||
|
public static FRIEND_TYPING = 4088;
|
||||||
public static MODERATION_REPORT_DISABLED = 1651;
|
public static MODERATION_REPORT_DISABLED = 1651;
|
||||||
public static MODERATION_TOOL = 2696;
|
public static MODERATION_TOOL = 2696;
|
||||||
public static MODERATION_USER_INFO = 2866;
|
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 './AcceptFriendResultEvent';
|
||||||
export * from './ConsoleReadReceiptEvent';
|
export * from './ConsoleReadReceiptEvent';
|
||||||
|
export * from './FriendIsTypingEvent';
|
||||||
export * from './FindFriendsProcessResultEvent';
|
export * from './FindFriendsProcessResultEvent';
|
||||||
export * from './FollowFriendFailedEvent';
|
export * from './FollowFriendFailedEvent';
|
||||||
export * from './FriendListFragmentEvent';
|
export * from './FriendListFragmentEvent';
|
||||||
|
|||||||
@@ -130,6 +130,7 @@ export class OutgoingHeader
|
|||||||
public static REMOVE_FRIEND_CATEGORY = 4083;
|
public static REMOVE_FRIEND_CATEGORY = 4083;
|
||||||
public static MOVE_FRIEND_TO_CATEGORY = 4084;
|
public static MOVE_FRIEND_TO_CATEGORY = 4084;
|
||||||
public static MARK_CONSOLE_READ = 4085;
|
public static MARK_CONSOLE_READ = 4085;
|
||||||
|
public static CONSOLE_TYPING = 4087;
|
||||||
public static MOD_TOOL_USER_INFO = 3295;
|
public static MOD_TOOL_USER_INFO = 3295;
|
||||||
public static GET_USER_FLAT_CATS = 3027;
|
public static GET_USER_FLAT_CATS = 3027;
|
||||||
public static NAVIGATOR_INIT = 2110;
|
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 './AcceptFriendMessageComposer';
|
||||||
export * from './MarkConsoleReadComposer';
|
export * from './MarkConsoleReadComposer';
|
||||||
|
export * from './ConsoleTypingComposer';
|
||||||
export * from './AddFriendCategoryComposer';
|
export * from './AddFriendCategoryComposer';
|
||||||
export * from './DeclineFriendMessageComposer';
|
export * from './DeclineFriendMessageComposer';
|
||||||
export * from './FindNewFriendsMessageComposer';
|
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 './AcceptFriendFailureData';
|
||||||
export * from './ConsoleReadReceiptParser';
|
export * from './ConsoleReadReceiptParser';
|
||||||
|
export * from './FriendIsTypingParser';
|
||||||
export * from './AcceptFriendResultParser';
|
export * from './AcceptFriendResultParser';
|
||||||
export * from './FindFriendsProcessResultParser';
|
export * from './FindFriendsProcessResultParser';
|
||||||
export * from './FollowFriendFailedParser';
|
export * from './FollowFriendFailedParser';
|
||||||
|
|||||||
Reference in New Issue
Block a user