과정

image.png

Connect Message Flow에 맞게 Client로부터 Command Message가 오면 Client에게 Window Acknowledgement Size와 Set Peer Bandwidth Protocol Message를 전송합니다.

function writePacket(socket: net.Socket, streamId: number, messageTypeId: number, payload: Buffer) {
  const basicHeader = Buffer.alloc(1);
  basicHeader.writeIntLE(streamId, 0, 1);
  const messageHeader = Buffer.alloc(11);
  messageHeader.writeIntBE(payload.length, 3, 3); // message length 설정
  messageHeader.writeIntBE(messageTypeId, 6, 1); // message type id 설정

  socket.write(Buffer.concat([basicHeader, messageHeader, payload]));
}

function connect(socket: net.Socket) {
  const windowAckSizePayload = Buffer.alloc(4);
  windowAckSizePayload.writeIntBE(5000000, 0, 4);
  writePacket(socket, 2, 5, windowAckSizePayload);

  const setPeerBandwidthPayload = Buffer.alloc(5);
  setPeerBandwidthPayload.writeIntBE(5000000, 0, 4);
  setPeerBandwidthPayload.writeIntBE(2, 4, 1);
  writePacket(socket, 2, 6, setPeerBandwidthPayload);

  const setChunkSizePayload = Buffer.alloc(4);
  setChunkSizePayload.writeIntBE(4096, 0, 4);
  writePacket(socket, 2, 1, setChunkSizePayload);

  const responsePayload = encodeAmf0Cmd(RESULT_COMMAND_MESSAGE);
  writePacket(socket, 3, 20, responsePayload);

  return true;
}

Connect 과정에서는