Mach es doch in etwa so:
Aktion - Reaktion
Client loggt sich ein - Server fügt der Userliste den Client zu und sendet true oder false zurück, ob es geklappt hat (Fault wegen doppeltem Benutzername zB)
Client sendet Nachricht - Server fügt jedem Client (Klasse TClient mit Stringlist zB) Die Message hinzu für den sie bestimmt ist
Client (periodisch) fragt nach neuen Daten - Server setzt regelmäßig inkrementierte Ping-Variable zurück(Ach den User gibt es doch noch
) und sendet dem Client alle Messages sowie die Userliste und leert die Client-Stringlist. Der client hängt die Messages an.
Das wars auch schon. Wenn du fragen hast, frag.