TServerSocket - system logowania

0

Mój serwer oparty na TServerSocket posiada pewną bazę użytkowników w plikach ini. Przy połączeniu klienta wysyła mu komunikat 'hi'. Klient od razu musi wysłać pakiet z loginem i hasłem - tu nie ma problemu bo w przypadku podania nieprawidłowego loginu/hasła serwer rozłącza klienta. Jednak problem jest w momencie gdy klient po połączeniu nie wyśle takiego pakietu - chce aby serwer oczekiwał określoną ilość czasu a następnie rozłączał klienta w przypadku nie podania loginu. Jak to zrobić (uwzględniony jest fakt, że podczas oczekiwania mogą podłączać się inne klienty)?

0

Jest to problem gdyż (TSerwerSocket) nie udostępnia takowej możliwośći. Rozwiązaniem wydaje się być lista i TTimer. TTimer wykonuje okresowo zwiększenie pewnego licznika o ustaloną wartość i przy okazji sprawdza czy liczniki osiągneły pewną wartość jeżeli tak to rozłanczamy klienta i usuwamy licznik z nim związany. Jedynym problemem jest jednoznaczne powiązanie liczników i odpowiednich socketów. Pomysł lista przechowyje coś takiego

type
  TCosTam = record
    socket: TCustomWinSocket;
    licznik: Integer;
  end;

przy takim podejściu do sprawy przy łączeniu sie klienta do Serwera do listy dodajemy (socket, 0).Cykliczne dodawanie do licznika aż do osiągnięcia jest łatwe. Po przepełnieniu od razu wiemy który socket trzeba rozłączyć(oczywiście trzeba także usunąc z listy z licznikami)

0

Wystarczy serwer zrobić wielowątkowo i po problemie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1