Skip to content

Commit

Permalink
added: transfer method to tcp clients
Browse files Browse the repository at this point in the history
  • Loading branch information
brendanfh committed Mar 23, 2024
1 parent 26cf0b9 commit e2aec71
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions core/net/tcp.onyx
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ TCP_Server.Client :: struct {
use socket : Socket;
address : SocketAddress;
state : State;
server : &TCP_Server;

recv_ready_event_present := false;

Expand All @@ -136,6 +137,10 @@ TCP_Server.Client.read_complete :: (use this: &TCP_Server.Client) {
recv_ready_event_present = false;
}

TCP_Server.Client.transfer :: (use this: &TCP_Server.Client, new_server: &TCP_Server) -> ? &TCP_Server.Client {
return tcp_server_transfer_client(server, this, new_server);
}

tcp_server_make :: (max_clients := 32, allocator := context.allocator) -> &TCP_Server {
maybe_socket := socket_create(.Inet, .Stream, .IP); // IPv6?
if maybe_socket.Err do return null;
Expand Down Expand Up @@ -182,6 +187,7 @@ tcp_server_pulse :: (use server: &TCP_Server) -> bool {
if client_count < clients.count {
socket->accept().Ok->with([client_data] {
client := new(TCP_Server.Client, allocator=client_allocator);
client.server = server;
client.state = .Alive;
client.socket = client_data.socket;
client.address = client_data.addr;
Expand Down Expand Up @@ -328,6 +334,7 @@ tcp_server_transfer_client :: (server: &TCP_Server, client: &TCP_Server.Client,
if other_server.client_count >= other_server.clients.count do return .None;

transferred_client := other_server.client_allocator->move(*client);
transferred_client.server = other_server;

for& other_server.clients {
if *it == null {
Expand Down

0 comments on commit e2aec71

Please sign in to comment.