Hello All, Ok I got a problem with my code below it generates a userlist for
my chat system now the problem am having when it generates list and some one
is logging in or out while generating the list it will do fake names that
don't exist
function GetLobbyUsers(const aLobbyID: string): string;
var
i: Integer;
HostID: string;
begin
Result := '';
for i := 0 to (SocketServer.ClientCount -1) do
begin
if (CompareText(SocketServer.Client[i].Lobby, aLobbyID) = 0) then
begin
HostID := '';
HostID :=
IntToStr(Integer(CompareText(SocketServer.Client[i].LobbyOwner,
SocketServer.Client[i].Name) = 0));
//
SocketServer.Client[i].HasHighLatancy := False;
SocketServer.Client[i].HasLowLatancy := False;
SocketServer.Client[i].IsCheckingLatancy := True;
//
Result := Result + 'š11œ' + aLobbyID + 'œ'
+ SocketServer.Client[i].Name + 'œ'
+ SocketServer.Client[i].Rank + 'œ'
+ SocketServer.Client[i].IconNumber + 'œ'
+ SocketServer.Client[i].BIconNumber + 'œ'
+ MBoolToStr(SocketServer.Client[i].IsAFK) + 'œ'
+ HostID + 'œ'
+ SocketServer.Client[i].HasTrophy + 'œ'
+ MBoolToStr(SocketServer.Client[i].IsDownloading) + 'œ'
+ MBoolToStr(SocketServer.Client[i].HasHighLatancy) + 'œ'
+ MBoolToStr(SocketServer.Client[i].HasLowLatancy) + 'œ'
+ MBoolToStr(SocketServer.Client[i].IsCheckingLatancy) + 'œ'
+ MBoolToStr(SocketServer.Client[i].IsBlocked) + 'œ';
end;
end;
end;
I looked this up and it maybe this issue here, Being a chat system and
assuming SocketServer.Client is the list of connected users, is it possible
that users are connecting and disconnecting while you are still iterating
the list of users? If so, then SocketServer.ClientCount could be modified
while you are still iterating which would be very bad. This might explain
why you get fake users (i.e. disconnected while iterating) or missing users
(connected while still iterating). If this is the case, then you might need
to lock SocketServer.Client while you are iterating it i.e. prevent adding
or removing items from the list. Or maybe create a copy of
SocketServer.Client and iterate the copy. Regardless, performance is
critical so you need to iterate the list of users very quickly.
anyone got any advice or can help me recode to better solution thanks alot
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be