Skip to content

Instantly share code, notes, and snippets.

@Yovach
Created July 21, 2020 21:36
Show Gist options
  • Save Yovach/7e3c4b6bb1ab89d9e29b511a4b7acc27 to your computer and use it in GitHub Desktop.
Save Yovach/7e3c4b6bb1ab89d9e29b511a4b7acc27 to your computer and use it in GitHub Desktop.
A class that allows to separate buffers thanks to a byte.
export class MessageData extends Array {
private readonly delimiter: number
constructor (delimiter: number) {
super()
this.delimiter = delimiter
}
isFinished (): boolean {
return this.length === 0 || !this.includes(this.delimiter)
}
next (): number[] | null {
const delimiterIndex = this.indexOf(this.delimiter)
if (delimiterIndex !== -1) {
return this.splice(0, delimiterIndex + 1)
}
return null
}
}
@Yovach
Copy link
Author

Yovach commented Jul 21, 2020

On Node.JS, you can parse packet from 'data' event.

Example :

export default class Player {
  messageHandler: MessageData

  constructor() {
    this.messageHandler = new MessageData(0) // I want to split packets by 00 (NULL byte)
  }

  /**
   * @param data
   */
  async onHandleData(data: Buffer) {
    this.messageHandler.push(...data)
    while (!this.messageHandler.isFinished()) {
      const receive = this.messageHandler.next()
      if (receive !== null) {
        // ... here we handle the data ...
      }
    }
  }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment