Skip to content

Commit

Permalink
room.d: avoid pointless work
Browse files Browse the repository at this point in the history
  • Loading branch information
mathiascode committed Jan 5, 2025
1 parent 4629dbe commit cea0146
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 100 deletions.
30 changes: 14 additions & 16 deletions src/server/messages.d
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ module soulfind.server.messages;

import soulfind.defines : blue, norm;
import soulfind.server.room : Ticker;
import soulfind.server.user : User;
import std.algorithm : sort;
import std.bitmanip : Endian, nativeToLittleEndian, peek;
import std.stdio : writefln;
Expand Down Expand Up @@ -791,37 +792,34 @@ class SRoomList : SMessage

class SJoinRoom : SMessage
{
this(string room_name, string[] usernames, uint[string] statuses,
uint[string] speeds, uint[string] upload_numbers,
uint[string] shared_files, uint[string] shared_folders,
string[string] country_codes) scope
this(string room_name, User[string] users) scope
{
super(JoinRoom);

write!string(room_name);
const n = cast(uint) usernames.length;
const n = cast(uint) users.length;

write!uint(n);
foreach (username ; usernames) write!string(username);
foreach (username, user ; users) write!string(username);

write!uint(n);
foreach (username ; usernames) write!uint(statuses[username]);
foreach (user ; users) write!uint(user.status);

write!uint(n);
foreach (username ; usernames)
foreach (user ; users)
{
write!uint(speeds [username]);
write!uint(upload_numbers [username]);
write!uint(user.speed);
write!uint(user.upload_number);
write!uint(0); // unknown, obsolete
write!uint(shared_files [username]);
write!uint(shared_folders [username]);
write!uint(user.shared_files);
write!uint(user.shared_folders);
}

write!uint(n);
foreach (username ; usernames) write!uint(0); // slots_full, obsolete
foreach (user ; users) write!uint(0); // slots_full, obsolete

write!uint(n);
foreach (username ; usernames) write!string(country_codes[username]);
foreach (user ; users) write!string(user.country_code);
}
}

Expand Down Expand Up @@ -1071,13 +1069,13 @@ class SItemSimilarUsers : SMessage

class SRoomTicker : SMessage
{
this(string room_name, Ticker[] tickers) scope
this(string room_name, Ticker[string] tickers) scope
{
super(RoomTicker);

write!string(room_name);
write!uint(cast(uint) tickers.length);
foreach (ticker ; sort_timestamp(tickers))
foreach (ticker ; sort_timestamp(tickers.values))
{
write!string(ticker.username);
write!string(ticker.content);
Expand Down
98 changes: 18 additions & 80 deletions src/server/room.d
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class Room
{
string name;

private User[string] user_list;
private User[string] users;
private Ticker[string] tickers;


Expand All @@ -35,20 +35,17 @@ class Room

void add_user(User user)
{
if (user.username in user_list)
if (user.username in users)
return;

user_list[user.username] = user;
users[user.username] = user;

scope joined_room_msg = new SUserJoinedRoom(
name, user.username, user.status, user.speed, user.upload_number,
user.shared_files, user.shared_folders, user.country_code
);
scope join_room_msg = new SJoinRoom(
name, user_names, statuses, speeds, upload_numbers,
shared_files, shared_folders, country_codes
);
scope tickers_msg = new SRoomTicker(name, tickers.values);
scope join_room_msg = new SJoinRoom(name, users);
scope tickers_msg = new SRoomTicker(name, tickers);

send_to_all(joined_room_msg);
user.send_message(join_room_msg);
Expand All @@ -57,87 +54,28 @@ class Room

void remove_user(string username)
{
if (username !in user_list)
if (username !in users)
return;

user_list.remove(username);
users.remove(username);

scope msg = new SUserLeftRoom(username, name);
send_to_all(msg);
}

bool is_joined(string username)
{
return (username in user_list) ? true : false;
return (username in users) ? true : false;
}

ulong num_users()
{
return user_list.length;
}

private string[] user_names()
{
return user_list.keys;
}

private uint[string] statuses()
{
uint[string] statuses;
foreach (user ; user_list)
statuses[user.username] = user.status;

return statuses;
}

private uint[string] speeds()
{
uint[string] speeds;
foreach (user ; user_list)
speeds[user.username] = user.speed;

return speeds;
}

private uint[string] upload_numbers()
{
uint[string] upload_numbers;
foreach (user ; user_list)
upload_numbers[user.username] = user.upload_number;

return upload_numbers;
}

private uint[string] shared_files()
{
uint[string] shared_files;
foreach (user ; user_list)
shared_files[user.username] = user.shared_files;

return shared_files;
}

private uint[string] shared_folders()
{
uint[string] shared_folders;
foreach (user ; user_list)
shared_folders[user.username] = user.shared_folders;

return shared_folders;
}

private string[string] country_codes()
{
string[string] country_codes;
foreach (user ; user_list)
country_codes[user.username] = user.country_code;

return country_codes;
return users.length;
}

void send_to_all(scope SMessage msg)
{
foreach (user ; user_list)
foreach (user ; users)
user.send_message(msg);
}

Expand All @@ -146,7 +84,7 @@ class Room

void say(string username, string message)
{
if (username !in user_list)
if (username !in users)
return;

scope msg = new SSayChatroom(name, username, message);
Expand All @@ -158,7 +96,7 @@ class Room

void add_ticker(string username, string content)
{
if (username !in user_list)
if (username !in users)
return;

if (username in tickers && tickers[username].content == content)
Expand Down Expand Up @@ -193,25 +131,25 @@ class Room

class GlobalRoom
{
private User[string] user_list;
private User[string] users;


void add_user(User user)
{
if (user.username !in user_list)
user_list[user.username] = user;
if (user.username !in users)
users[user.username] = user;
}

void remove_user(string username)
{
if (username in user_list)
user_list.remove(username);
if (username in users)
users.remove(username);
}

void say(string room_name, string username, string message)
{
scope msg = new SGlobalRoomMessage(room_name, username, message);
foreach (user ; user_list)
foreach (user ; users)
user.send_message(msg);
}
}
4 changes: 2 additions & 2 deletions src/server/server.d
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ class Server
ulong[string] room_stats()
{
ulong[string] stats;
foreach (room ; room_list.values) stats[room.name] = room.num_users;
foreach (room ; room_list) stats[room.name] = room.num_users;
return stats;
}

Expand Down Expand Up @@ -544,7 +544,7 @@ class Server

case "rooms":
string list;
foreach (room ; room_list.values)
foreach (room ; room_list)
list ~= format!("%s:%d ")(room.name, room.num_users);
admin_pm(admin, list);
break;
Expand Down
4 changes: 2 additions & 2 deletions src/server/user.d
Original file line number Diff line number Diff line change
Expand Up @@ -371,12 +371,12 @@ class User

void leave_joined_rooms()
{
foreach (name, room ; joined_rooms)leave_room(name);
foreach (name, room ; joined_rooms) leave_room(name);
}

string h_joined_rooms()
{
return joined_rooms.keys.join(", ");
return joined_rooms.byKey.join(", ");
}


Expand Down

0 comments on commit cea0146

Please sign in to comment.