get join-game logic working
This commit is contained in:
parent
09bf48481a
commit
32ea10495e
3 changed files with 145 additions and 49 deletions
|
|
@ -65,6 +65,7 @@
|
|||
[player-id message]
|
||||
(if-let [player (get @players player-id)]
|
||||
(try
|
||||
(t/log! {:level :info :data {:player-id player-id :message message}} "Sending to player")
|
||||
(s/put! @server-socket
|
||||
{:host (:host player)
|
||||
:port (:port player)
|
||||
|
|
@ -74,13 +75,18 @@
|
|||
(t/log! {:level :warn :data {:player-id player-id}} "Player not found")))
|
||||
|
||||
(defn join-game! [player-id]
|
||||
(let [waiting-game
|
||||
(let [existing-game (get-in @games [:by-id player-id])
|
||||
waiting-game
|
||||
(some-> (first (filter (fn [game] (nil? (:player-2 game))) (@games :all)))
|
||||
(assoc :player-2 player-id))
|
||||
other-player-id (:player-1 waiting-game)
|
||||
new-game {:player-1 player-id :player-2 nil}]
|
||||
(if waiting-game
|
||||
(do
|
||||
(cond
|
||||
existing-game
|
||||
(if (nil? (:player-2 existing-game))
|
||||
(send-to-player player-id "WAIT")
|
||||
(send-to-player player-id "READY_TO_PLAY"))
|
||||
waiting-game (do
|
||||
(swap! games (fn [state]
|
||||
{:by-id
|
||||
(-> (:by-id state)
|
||||
|
|
@ -91,7 +97,7 @@
|
|||
game)) (:all state))}))
|
||||
(send-to-player other-player-id "READY_TO_PLAY")
|
||||
(send-to-player player-id "READY_TO_PLAY"))
|
||||
(do
|
||||
:else (do
|
||||
(swap! games (fn [state]
|
||||
{:by-id (assoc (:by-id state) player-id new-game)
|
||||
:all (conj (:all state) new-game)}))
|
||||
|
|
|
|||
77
backend/test-client.sh
Executable file
77
backend/test-client.sh
Executable file
|
|
@ -0,0 +1,77 @@
|
|||
#!/bin/bash
|
||||
|
||||
# UDP test client with interactive key controls
|
||||
# Connects to game server and displays responses
|
||||
|
||||
HOST="localhost"
|
||||
SERVER_PORT=9999
|
||||
LISTEN_PORT=12345
|
||||
|
||||
echo "=========================================="
|
||||
echo " Game Test Client"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "Controls:"
|
||||
echo " 1 = REGISTER (join game)"
|
||||
echo " 2 = Send position update (100, 200)"
|
||||
echo " 3 = Send position update (300, 150)"
|
||||
echo " q = quit"
|
||||
echo ""
|
||||
echo "Listening for server responses on port $LISTEN_PORT..."
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# Create named pipe for responses
|
||||
RESPONSE_PIPE=$(mktemp -d)/response
|
||||
mkfifo "$RESPONSE_PIPE"
|
||||
|
||||
# Start UDP listener in background, output to FIFO
|
||||
nc -u -l 127.0.0.1 $LISTEN_PORT > "$RESPONSE_PIPE" 2>/dev/null &
|
||||
LISTENER_PID=$!
|
||||
|
||||
# Read responses in background and display them
|
||||
(while IFS= read -r line; do
|
||||
echo "[SERVER] $line"
|
||||
done < "$RESPONSE_PIPE") &
|
||||
READER_PID=$!
|
||||
|
||||
# Cleanup on exit
|
||||
cleanup() {
|
||||
kill $LISTENER_PID $READER_PID 2>/dev/null
|
||||
rm -rf "$(dirname "$RESPONSE_PIPE")"
|
||||
echo ""
|
||||
echo "Disconnected."
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
# Interactive input loop
|
||||
echo -n "> "
|
||||
while IFS= read -rsn1 key; do
|
||||
case "$key" in
|
||||
1)
|
||||
echo ""
|
||||
echo "[CLIENT] Sending: REGISTER"
|
||||
echo -n "REGISTER" | nc -u -w1 -p $LISTEN_PORT "$HOST" "$SERVER_PORT" 2>/dev/null
|
||||
echo -n "> "
|
||||
;;
|
||||
2)
|
||||
echo ""
|
||||
echo "[CLIENT] Sending: POS#100#200"
|
||||
echo -n "POS#100#200" | nc -u -w1 -p $LISTEN_PORT "$HOST" "$SERVER_PORT" 2>/dev/null
|
||||
echo -n "> "
|
||||
;;
|
||||
3)
|
||||
echo ""
|
||||
echo "[CLIENT] Sending: POS#300#150"
|
||||
echo -n "POS#300#150" | nc -u -w1 -p $LISTEN_PORT "$HOST" "$SERVER_PORT" 2>/dev/null
|
||||
echo -n "> "
|
||||
;;
|
||||
q|Q)
|
||||
echo ""
|
||||
break
|
||||
;;
|
||||
*)
|
||||
# Don't print anything for invalid keys, just show prompt again
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
|
@ -1,48 +1,61 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Simple UDP test script for the game server
|
||||
# Sends registration and position updates to simulate two players
|
||||
# Sends registration from two players on specific ports and receives responses
|
||||
|
||||
HOST="localhost"
|
||||
PORT=9999
|
||||
SERVER_PORT=9999
|
||||
|
||||
echo "Testing game server at $HOST:$PORT"
|
||||
echo ""
|
||||
echo "Testing game server at $HOST:$SERVER_PORT"
|
||||
RESPONSE1=$(mktemp)
|
||||
# RESPONSE2=$(mktemp)
|
||||
|
||||
# Helper to send UDP packet
|
||||
send_udp() {
|
||||
local msg="$1"
|
||||
echo "Sending: $msg"
|
||||
echo -n "$msg" | nc -u -w1 "$HOST" "$PORT"
|
||||
}
|
||||
echo "=== Listener on port 12345 ==="
|
||||
nc -u -l 127.0.0.1 12345 > "$RESPONSE1" &
|
||||
PID1=$!
|
||||
sleep 3
|
||||
|
||||
echo "=== Registering Player 1 ==="
|
||||
send_udp "REGISTER"
|
||||
nc -u -l 0.0.0.0 12345
|
||||
trap "rm -f $RESPONSE1 $RESPONSE2; jobs -p | xargs kill -9 2>/dev/null" EXIT
|
||||
# echo ""
|
||||
|
||||
# # Create temp files for responses
|
||||
# RESPONSE1=$(mktemp)
|
||||
# RESPONSE2=$(mktemp)
|
||||
|
||||
# # Cleanup on exit
|
||||
# trap "rm -f $RESPONSE1 $RESPONSE2; jobs -p | xargs kill -9 2>/dev/null" EXIT
|
||||
|
||||
# echo "=== Starting Player 1 listener on port 12345 ==="
|
||||
# nc -u -l 127.0.0.1 12345 > "$RESPONSE1" 2>/dev/null &
|
||||
# PID1=$!
|
||||
# sleep 0.3
|
||||
|
||||
# echo "=== Starting Player 2 listener on port 12346 ==="
|
||||
# nc -u -l 127.0.0.1 12346 > "$RESPONSE2" 2>/dev/null &
|
||||
# PID2=$!
|
||||
# sleep 0.3
|
||||
|
||||
# echo ""
|
||||
# echo "=== Sending REGISTER from Player 1 (port 12345) ==="
|
||||
# echo -n "REGISTER" | nc -u -w1 -p 12345 "$HOST" "$SERVER_PORT"
|
||||
# sleep 0.5
|
||||
|
||||
# echo ""
|
||||
# echo "=== Registering Player 2 ==="
|
||||
# send_udp "register:2"
|
||||
# sleep 0.5
|
||||
# echo "=== Sending REGISTER from Player 2 (port 12346) ==="
|
||||
# echo -n "REGISTER" | nc -u -w1 -p 12346 "$HOST" "$SERVER_PORT"
|
||||
# sleep 1
|
||||
|
||||
# echo ""
|
||||
# echo "=== Player 1 moving around ==="
|
||||
# for i in {1..3}; do
|
||||
# x=$((100 + i * 10))
|
||||
# y=$((200 + i * 5))
|
||||
# send_udp "1:$x:$y"
|
||||
# sleep 0.3
|
||||
# done
|
||||
# echo "=== Stopping listeners ==="
|
||||
# kill $PID1 $PID2 2>/dev/null
|
||||
# sleep 0.2
|
||||
|
||||
# echo ""
|
||||
# echo "=== Player 2 moving around ==="
|
||||
# for i in {1..3}; do
|
||||
# x=$((300 - i * 10))
|
||||
# y=$((150 + i * 20))
|
||||
# send_udp "2:$x:$y"
|
||||
# sleep 0.3
|
||||
# done
|
||||
# echo "=== Results ==="
|
||||
# echo "Player 1 response:"
|
||||
# cat "$RESPONSE1"
|
||||
# echo ""
|
||||
# echo "Player 2 response:"
|
||||
# cat "$RESPONSE2"
|
||||
|
||||
echo ""
|
||||
# echo ""
|
||||
echo "Done!"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue