Skip to content

Commit

Permalink
Multiclient support
Browse files Browse the repository at this point in the history
  • Loading branch information
vines26 committed May 28, 2024
1 parent d59dcef commit 890c973
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 23 deletions.
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,9 @@ apt-get update && apt-get install ncat && ncat -vvvvvv --broker --listen -p 7777

Back in the first server container terminal
```
race-cli --dir /server-kits --server-bootstrap-connect --recv-channel=twoSixDirectCpp --send-channel=twoSixDirectCpp --final-send-channel=twoSixDirectCpp --final-recv-channel=twoSixDirectCpp --param hostname="10.11.1.2" --param PluginCommsTwoSixStub.startPort=26262 --param PluginCommsTwoSixStub.endPort=26269 --debug | tee rrlog | grep ERROR
ncat --broker --listen -p 7777 -vv --chat
race-cli --dir /server-kits --server-bootstrap-connect --recv-channel=twoSixDirectCpp --send-channel=twoSixDirectCpp --final-send-channel=twoSixDirectCpp --final-recv-channel=twoSixDirectCpp --param hostname="10.11.1.2" --param PluginCommsTwoSixStub.startPort=26262 --param PluginCommsTwoSixStub.endPort=26269 --debug | tee rrlog | grep SOCKET
```

Start another server terminal, and start a `nc` session to read/write from stdio.
Expand All @@ -148,7 +150,7 @@ docker run --rm -it --name=rbclient --network=rib-overlay-network --ip=10.11.1.3
-v $(pwd)/scripts/:/scripts/ \
raceboat:latest bash

race-cli --dir /client-kits --client-bootstrap-connect --send-channel=twoSixDirectCpp --send-address="{\"hostname\":\"10.11.1.2\",\"port\":26262}" --recv-channel=twoSixDirectCpp --final-send-channel=twoSixDirectCpp --final-recv-channel=twoSixDirectCpp --param hostname="10.11.1.3" --param PluginCommsTwoSixStub.startPort=26262 --param PluginCommsTwoSixStub.endPort=26265 --param localPort=9999 --debug | tee srlog | grep ERROR &
race-cli --dir /client-kits --client-bootstrap-connect --send-channel=twoSixDirectCpp --send-address="{\"hostname\":\"10.11.1.2\",\"port\":26262}" --recv-channel=twoSixDirectCpp --final-send-channel=twoSixDirectCpp --final-recv-channel=twoSixDirectCpp --param hostname="10.11.1.3" --param PluginCommsTwoSixStub.startPort=26262 --param PluginCommsTwoSixStub.endPort=26265 --param localPort=9999 --debug | tee srlog | grep ERROR

nc localhost 9999

Expand All @@ -164,7 +166,7 @@ docker run --rm -it --name=rbclient2 --network=rib-overlay-network --ip=10.11.1.
-v $(pwd)/scripts/:/scripts/ \
raceboat:latest bash

race-cli --dir /client-kits --client-bootstrap-connect --send-channel=twoSixDirectCpp --send-address="{\"hostname\":\"10.11.1.2\",\"port\":26262}" --recv-channel=twoSixDirectCpp --final-send-channel=twoSixDirectCpp --final-recv-channel=twoSixDirectCpp --param hostname="10.11.1.4" --param PluginCommsTwoSixStub.startPort=26266 --param PluginCommsTwoSixStub.endPort=26269 --param localPort=9998 --debug | tee srlog | grep ERROR &
race-cli --dir /client-kits --client-bootstrap-connect --send-channel=twoSixDirectCpp --send-address="{\"hostname\":\"10.11.1.2\",\"port\":26262}" --recv-channel=twoSixDirectCpp --final-send-channel=twoSixDirectCpp --final-recv-channel=twoSixDirectCpp --param hostname="10.11.1.4" --param PluginCommsTwoSixStub.startPort=26266 --param PluginCommsTwoSixStub.endPort=26269 --param localPort=9998 --debug | tee srlog | grep ERROR

nc localhost 9998
```
Expand Down
41 changes: 21 additions & 20 deletions app/race-cli/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -730,19 +730,19 @@ int create_client_connection(std::string &hostaddr, uint16_t port) {
return -1;
}

printf("new client socket family:%d, type:%d, protocol:%d\n", res->ai_family, res->ai_socktype, res->ai_protocol);
printf("SOCKET new client socket family:%d, type:%d, protocol:%d\n", res->ai_family, res->ai_socktype, res->ai_protocol);
client_sock = ::socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if (client_sock >= 0 &&
::connect(client_sock, res->ai_addr, res->ai_addrlen) < 0) {
printf("connect() failed\n");
printf("SOCKET connect() failed\n");
close_socket(client_sock);
client_sock = -1;
}

if (res != nullptr) {
::freeaddrinfo(res);
}
printf("connected socket %d\n", client_sock);
printf("SOCKET connected socket %d\n", client_sock);
return client_sock;
}

Expand Down Expand Up @@ -943,7 +943,7 @@ int handle_client_bootstrap_connect(const CmdOptions &opts) {
return 0;
}

ApiStatus server_connections_loop(Race &race, BootstrapConnectionOptions &conn_opt, int client_sock) {
ApiStatus server_connections_loop(Race &race, BootstrapConnectionOptions &conn_opt, int local_port) {
ApiStatus status = ApiStatus::OK;

printf("CREATING RACE SERVER SOCKET\n");
Expand All @@ -955,6 +955,7 @@ ApiStatus server_connections_loop(Race &race, BootstrapConnectionOptions &conn_o
}
printf("\nlistening on link address: '%s'", link_addr.c_str());

std::string host = "localhost";
std::unordered_map<OpHandle, Raceboat::Conduit> connections;
while (1) {
printf("server calling accept\n");
Expand All @@ -964,8 +965,23 @@ ApiStatus server_connections_loop(Race &race, BootstrapConnectionOptions &conn_o
status = status2;
break;
}


printf("AWAITING LOCAL CLIENT\n");

// create client connection for listening socket to connect on
// assume listening process is or will be running
int client_sock = -1;
while (client_sock < 0) {
if ((client_sock = create_client_connection(host, local_port)) < 0) {
printf("Awaiting listening socket \n");
sleep(5);
}
}

printf("accept success\n");
connections[connection.getHandle()] = connection;
printf("SOCKET client_sock: %d\n", client_sock);
relay_data_loop(client_sock, connections[connection.getHandle()]);

for (auto handleConnPair: connections) {
Expand Down Expand Up @@ -1011,24 +1027,9 @@ int handle_server_bootstrap_connect(const CmdOptions &opts) {

printf("handle_server_bootstrap_connect\n");

int client_sock = -1;
std::string host = "localhost";
int local_port = 7777;
check_for_local_port_override(opts, local_port);

printf("AWAITING LOCAL CLIENT\n");

// create client connection for listening socket to connect on
// assume listening process is or will be running
while (client_sock < 0) {
if ((client_sock = create_client_connection(host, local_port)) < 0) {
printf("Awaiting listening socket \n");
sleep(5);
}
}

ApiStatus status = server_connections_loop(race, conn_opt, client_sock);
close_socket(client_sock);
ApiStatus status = server_connections_loop(race, conn_opt, local_port);

return (status == ApiStatus::OK);
}
Expand Down

0 comments on commit 890c973

Please sign in to comment.