{ =========================================================================== }
{  Przykładowy Serwer oczekuje na porcie 4879 i odsyła do wszystkich          }
{  klientów każdą otrzymaną porcję danych zakończoną znakami końca wiersza.   }
{ =========================================================================== }

program Server;

{$APPTYPE CONSOLE}

uses Windows, SimpleTcp;

var
  Serv: TTcpServer;
  SList: TTcpSocketList;

function ConProc(CtrlType: DWORD): BOOL; stdcall;
begin
  Serv.Close;
  Result := True;
end;

procedure ClientProc(P: Pointer);
var
  S: AnsiString;
  I: Integer;
begin
  while TTcpSocket(P).ReadLn(S) do
  begin
    SList.Lock;
    for I := 0 to SList.Count - 1 do SList[I].WriteLn(S);
    SList.Unlock;
  end;
end;

procedure ServerProc;
var
  I: Integer;
  Sock: TTcpSocket;
begin
  SList := TTcpSocketList.Create;
  Serv := TTcpServer.Create(4879);
  SetConsoleCtrlHandler(@ConProc, True);
  repeat
    Sock := Serv.Accept;
    if Sock = nil then Continue;
    SList.Add(Sock);
    StartThread(ClientProc, Sock);
  until not Serv.Active;
  SList.Lock;
  for I := 0 to SList.Count - 1 do Slist[I].Close;
  SList.Unlock;
  Serv.Free;
  SList.Free;
end;

begin
  ServerProc;
end.
 
