silvioprog / brookframework

Microframework which helps to develop web Pascal applications.
https://github.com/risoflora/brookframework
GNU Lesser General Public License v3.0
170 stars 37 forks source link

Iniciar e parar o serviço #128

Closed MauricioTRS closed 8 years ago

MauricioTRS commented 8 years ago

Estou tentando implementar uma API JSON e preciso que o servidor HTTP seja ativado e desativado pelo usuário, com um botão de liga e desliga mesmo.

Criei uma Thread separada para manipular o servidor HTTP e ao iniciar o serviço e para-lo pela primeira vez, tudo ocorre bem. Porém ao tentar iniciar pela segunda vez, ele não é ativo.

Estou chamando os seguintes métodos:

Iniciar: BrookApp.Run();

Parar; BrookApp.Terminate();

silvioprog commented 8 years ago

Olá @MauricioTRS , teria como enviar um pequeno exemplo para reproduzir o problema? Essas duas chamadas que você citou estão funcionando aparentemente bem.

MauricioTRS commented 8 years ago

Segue a classe que manipula o servidor.

Estou chamando primeiro o método Finalizar da classe MinhaThread e depois executando o MinhaThread.Dispose();

unit uMinhaThread;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils,BrookApplication, BrookAction;
type

  MyThread = class(TThread)
    protected
      procedure Execute; override;
    public
    Constructor Create(CreateSuspended : boolean);
    procedure Finalizar();
  end;

  MyAction = class(TBrookAction)
    public
      procedure Get; override;
  end;

implementation
{ MyThread }

procedure MyThread.Execute;
begin
  BrookApp.Run;
end;

constructor MyThread.Create(CreateSuspended: boolean);
begin
  FreeOnTerminate := True;
  inherited Create(CreateSuspended);
end;

procedure MyThread.Finalizar;
begin
  BrookApp.Terminate();
end;

{ MyAction }

procedure MyAction.Get;
begin
  Write('Hello World!');
end;

end.
silvioprog commented 8 years ago

Este código está bastante confuso, impossível entender o que ele deveria fazer. Mas acho que entendi o que você quer criar, seria um form principal com dois botões Start/Stop para ligar/desligar o server? Se sim, um usuário solicitou algo assim na Lazarus-BR: https://groups.google.com/d/msg/lazarus-br/n7ShZqfFEwU/De8J0TsExSMJ. Caso o link do exemplo esteja quebrado você pode usar este aqui: https://app.box.com/s/2snum2w1er4u5bolfhvb5lt7be14gghp. Dê um retorno se era isso mesmo que você queria. :-)

MauricioTRS commented 8 years ago

PERFEITO!

Era exatamente isso que eu precisava. Acredito que meu problema estava mesmo ao manipular a Thread.

Muito obrigado!