<?php

namespace App\Classes\Protocol;

final class BinkpMessage
{
	public const BLK_HDR_SIZE	= 2;						/* header size */

	private int $id;
	private string $body;

	public function __construct(int $id,string $body)
	{
		$this->id = $id;
		$this->body = $body;
	}

	public function __get($key)
	{
		switch ($key) {
			case 'len':
				return strlen($this->body)+1+self::BLK_HDR_SIZE;

			case 'msg':
				$buf = self::mkheader((strlen($this->body)+1) | 0x8000);
				$buf .= chr($this->id);
				$buf .= $this->body;

				return $buf;

			default:
				throw new \Exception('Unknown key :'.$key);
		}
	}

	public static function mkheader(int $l): string
	{
		$buf = chr(($l>>8)&0xff);
		$buf .= chr($l&0xff);

		return $buf;
	}
}