Skip to content

Commit 3e8f31d

Browse files
Improved Send Data to Multiple Sockets
1 parent 5a7902d commit 3e8f31d

File tree

4 files changed

+25
-14
lines changed

4 files changed

+25
-14
lines changed

scripts/GameServer/GameServer.gml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ function GameServer(_port) : TCPServer(_port) constructor {
77
});
88
rpc.registerHandler("create_ball", function(_position, _socket) {
99
ballPosition = _position;
10-
clients.forEach(function(_client_socket) {
11-
rpc.sendNotification("create_ball", ballPosition, _client_socket);
12-
});
10+
rpc.sendNotification("create_ball", ballPosition, sockets);
1311
});
1412
rpc.registerHandler("set_name", function(_params, _socket) {
1513
if (string_length(_params) > 10) {

scripts/Manager/Manager.gml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ function Manager() constructor {
66
static getCount = function() {
77
return struct_names_count(elements);
88
}
9+
static getKeys = function() {
10+
return struct_get_names(elements);
11+
}
912
static getElement = function(_key) {
1013
if (struct_exists(elements, _key)) {
1114
return elements[$ _key];

scripts/Network/Network.gml

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,23 @@ function Network() constructor {
1313
static setDefaultSocket = function(_socket) {
1414
self.defaultSocket = _socket;
1515
}
16-
/// @function sendData()
17-
/// @description Send data to server.
18-
/// @param {Struct} data Data to be sent.
19-
/// @param {Id.Socket} socket Socket to send to.
20-
static sendData = function(_data, _socket = self.defaultSocket) {
16+
/// @function sendData()
17+
/// @description Send data to socket.
18+
/// @param {Struct} data Data to be sent.
19+
/// @param {Id.Socket} [sockets] Sockets to send to.
20+
static sendData = function(_data, _sockets = [self.defaultSocket]) {
21+
if (!is_array(_sockets)) {
22+
_sockets = [_sockets];
23+
}
2124
buffer_seek(buffer, buffer_seek_start, 0);
2225
var _json_string = json_stringify(_data);
2326
buffer_write(buffer, buffer_text, _json_string);
24-
if (raw) {
25-
network_send_raw(_socket, buffer, buffer_tell(buffer));
26-
} else {
27-
network_send_packet(_socket, buffer, buffer_tell(buffer));
28-
}
27+
array_foreach(_sockets, function(_socket) {
28+
if (raw) {
29+
network_send_raw(_socket, buffer, buffer_tell(buffer));
30+
} else {
31+
network_send_packet(_socket, buffer, buffer_tell(buffer));
32+
}
33+
});
2934
}
3035
}

scripts/Server/Server.gml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ function Server(_type, _port, _max_clients) constructor {
33
self.type = _type;
44
self.port = _port;
55
self.maxClients = _max_clients;
6-
self.clients = [];
6+
self.sockets = [];
77
self.clients = new Manager();
88
self.serverInstance = undefined;
99
self.network = new Network();
@@ -23,6 +23,7 @@ function Server(_type, _port, _max_clients) constructor {
2323
}
2424
static addClient = function(_socket) {
2525
clients.setElement(_socket, createClient());
26+
array_push(sockets, _socket);
2627
triggerEvent("connected", _socket);
2728
}
2829
static hasClient = function(_socket) {
@@ -34,11 +35,15 @@ function Server(_type, _port, _max_clients) constructor {
3435
static removeClient = function(_socket) {
3536
triggerEvent("disconnected", _socket);
3637
clients.removeElement(_socket);
38+
var _index = array_get_index(sockets, _socket);
39+
if (_index == -1) return;
40+
array_delete(sockets, _index, 1);
3741
}
3842
static destroy = function() {
3943
network_destroy(socket);
4044
instance_destroy(serverInstance);
4145
clients.clearAll();
46+
sockets = [];
4247
}
4348
static setEvent = function(_event, _method) {
4449
events[$ _event] = _method;

0 commit comments

Comments
 (0)