Files
Reticulum-Go/scripts/run_clients.sh
Sudo-Ivan 7a7ce84778 0.2.8
2024-12-30 12:58:43 -06:00

117 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
# Function to show usage
show_usage() {
echo "Usage: $0 [--type TYPE]"
echo " --type Type of client to run (default: client, options: client, ftp)"
exit 1
}
# Parse command line arguments
CLIENT_TYPE="client"
while [[ $# -gt 0 ]]; do
case $1 in
--type)
CLIENT_TYPE="$2"
shift 2
;;
*)
show_usage
;;
esac
done
# Validate client type
if [[ "$CLIENT_TYPE" != "client" && "$CLIENT_TYPE" != "ftp" ]]; then
echo "Error: Invalid client type. Must be 'client' or 'ftp'"
show_usage
fi
# Build the appropriate binaries
echo "Building Reticulum binaries..."
go build -o bin/reticulum ./cmd/reticulum
case $CLIENT_TYPE in
"client")
go build -o bin/reticulum-client ./cmd/client
CLIENT_BIN="reticulum-client"
;;
"ftp")
go build -o bin/reticulum-client-ftp ./cmd/client-ftp
CLIENT_BIN="reticulum-client-ftp"
;;
esac
# Check if build was successful
if [ $? -ne 0 ]; then
echo "Build failed!"
exit 1
fi
# Create directories
mkdir -p logs
mkdir -p bin
# Start the Reticulum server first
echo "Starting Reticulum server..."
./bin/reticulum > logs/server.log 2>&1 &
echo $! > logs/server.pid
sleep 2 # Give server time to start
# Generate identities for both clients
echo "Generating identities..."
CLIENT1_HASH=$(./bin/"$CLIENT_BIN" -config configs/test-client1.toml -generate-identity 2>&1 | grep "Identity hash:" | cut -d' ' -f3)
CLIENT2_HASH=$(./bin/"$CLIENT_BIN" -config configs/test-client2.toml -generate-identity 2>&1 | grep "Identity hash:" | cut -d' ' -f3)
echo "Client 1 Hash: $CLIENT1_HASH"
echo "Client 2 Hash: $CLIENT2_HASH"
# Function to run client
run_client() {
local config=$1
local target=$2
local logfile=$3
case $CLIENT_TYPE in
"client")
echo "Starting regular client with config: $config targeting: $target"
./bin/"$CLIENT_BIN" -config "$config" -target "$target" > "$logfile" 2>&1 &
;;
"ftp")
echo "Starting FTP client with config: $config serving directory: $target"
./bin/"$CLIENT_BIN" -config "$config" -serve "$target" > "$logfile" 2>&1 &
;;
esac
echo $! > "$logfile.pid"
echo "Client started with PID: $(cat $logfile.pid)"
}
# Run both clients with appropriate parameters
case $CLIENT_TYPE in
"client")
run_client "configs/test-client1.toml" "$CLIENT2_HASH" "logs/client1.log"
run_client "configs/test-client2.toml" "$CLIENT1_HASH" "logs/client2.log"
;;
"ftp")
# Create shared directories for FTP clients
mkdir -p ./shared/client1 ./shared/client2
run_client "configs/test-client1.toml" "./shared/client1" "logs/client1.log" "$CLIENT2_HASH"
run_client "configs/test-client2.toml" "./shared/client2" "logs/client2.log" "$CLIENT1_HASH"
;;
esac
echo
echo "Both clients are running. To stop everything:"
echo "kill \$(cat logs/*.pid)"
echo
echo "To view logs:"
echo "tail -f logs/client1.log"
echo "tail -f logs/client2.log"
if [ "$CLIENT_TYPE" = "ftp" ]; then
echo
echo "FTP shared directories:"
echo "./shared/client1"
echo "./shared/client2"
fi