procedure HandleCommands(Thread: TThread; Socket: TClientSocket; ParseProcedure: TParseProcedure; Stream: TMemoryStream);
var
  Frame: TCommandFrame;
  FrameStream: TMemoryStream;
  Position: dword;
begin
  Position := 0;
  FrameStream := TMemoryStream.Create;
  try
    while Position < Stream.Size do
    begin
      Stream.Position := Position;
      Stream.ReadBuffer(Frame, SizeOf(TCommandFrame));
      Inc(Position, SizeOf(TCommandFrame));
      FrameStream.Clear;
      FrameStream.Position := 0;
      FrameStream.CopyFrom(Stream, Frame.Len);
      Inc(Position, Frame.Len);
      FrameStream.Position := 0;
      ParseProcedure(Thread, Socket, Frame, FrameStream);
    end;
  finally
    FrameStream.Free;
  end;
end;procedure HandleConnection(Thread: TThread; ParseProcedure: TParseProcedure; Socket: TClientSocket);
var
  Frame: TStreamFrame;
  Buffer: array[0..4095] of Char;
  Stream: TMemoryStream;
  BytesReceived, StreamReceived: dword;
  OutputStream: TMemoryStream;
  DecompressionStream: TDecompressionStream;
  Nonblocking: cardinal;
begin
  Application := TApplication.Create;
  while Socket.Connected do
  begin
    Sleep(1);
    Application.ProcessMessages;
    ZeroMemory(@Frame, SizeOf(TStreamFrame));
    StreamReceived := 0;
    BytesReceived := Socket.ReceiveBuffer(Frame, SizeOf(TStreamFrame));
    if BytesReceived < SizeOf(TStreamFrame) then Continue;
    if Frame.Id <> FRAME_ID then Exit;
    Stream := TMemoryStream.Create;
    Stream.SetSize(Frame.Len);
    if Stream.Size < Frame.Len then Exit;
    try
      while ((StreamReceived < Frame.Len) and (Socket.Connected)) do
      begin
        Application.ProcessMessages;
        BytesReceived := Socket.ReceiveBuffer(Buffer, SizeOf(Buffer));
        if BytesReceived > 0 then
        begin
          Inc(StreamReceived, BytesReceived);
          Stream.WriteBuffer(Buffer, BytesReceived);
        end;
      end;
      Stream.Position := 0;
      OutputStream := TMemoryStream.Create;
      try
        DecompressionStream := TDecompressionStream.Create(Stream);
        OutputStream.CopyFrom(DecompressionStream, 0);
        DecompressionStream.Free;
        OutputStream.Position := 0;
        Nonblocking := 0;
        ioctlsocket(Socket.Socket, FIONBIO, Nonblocking);
        HandleCommands(Thread, Socket, ParseProcedure, OutputStream);
        Nonblocking := 1;
        ioctlsocket(Socket.Socket, FIONBIO, Nonblocking);
      finally
        OutputStream.Free;
      end;
    finally
      Stream.Free;
    end;
  end;
  Application.Free;
end;
请问这段代码有什么用