#!/usr/bin/env bash # Development server script for HdM slides # Starts index server + marp servers for each course set -e # Configuration INDEX_PORT=1310 COURSE_B_PORT=1311 COURSE_C_PORT=1312 COURSE_DIR="courses" DEV_INDEX_DIR=".dev-index" # Colors RED='\033[0;31m' GREEN='\033[0;32m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Cleanup function cleanup() { echo -e "\n${RED}Shutting down servers...${NC}" kill $PID_INDEX $PID_B $PID_C 2>/dev/null || true exit 0 } # Kill existing processes on our ports kill_existing() { echo -e "${BLUE}Cleaning up existing processes...${NC}" # Kill marp processes first pkill -9 -f "marp-cli" 2>/dev/null || true pkill -f "python3 -m http.server" 2>/dev/null || true # Kill ports including marp's WebSocket ports (37717-37720 range) fuser -k $INDEX_PORT/tcp $COURSE_B_PORT/tcp $COURSE_C_PORT/tcp 2>/dev/null || true fuser -k 37717/tcp 37718/tcp 37719/tcp 37720/tcp 2>/dev/null || true sleep 2 } # Generate dev index generate_index() { mkdir -p "$DEV_INDEX_DIR" cat > "$DEV_INDEX_DIR/index.html" << 'EOF' HdM Slides - Dev

HdM Slides

Development Server

EOF echo " 223015b
Dateiformate, Schnittstellen, Speichermedien & Distributionswege
Port $COURSE_B_PORT
" >> "$DEV_INDEX_DIR/index.html" echo " 223015c
Grundlagen IT- und Internettechnik
Port $COURSE_C_PORT
" >> "$DEV_INDEX_DIR/index.html" cat >> "$DEV_INDEX_DIR/index.html" << 'EOF'
EOF } # Main trap cleanup SIGINT SIGTERM kill_existing generate_index echo -e "${GREEN}Starting development servers...${NC}" echo "" echo -e " Index: ${BLUE}http://localhost:$INDEX_PORT${NC}" echo -e " 223015b: ${BLUE}http://localhost:$COURSE_B_PORT${NC}" echo -e " 223015c: ${BLUE}http://localhost:$COURSE_C_PORT${NC}" echo "" echo -e "Press ${RED}Ctrl+C${NC} to stop all servers" echo "" # Start servers python3 -m http.server $INDEX_PORT --directory "$DEV_INDEX_DIR" & PID_INDEX=$! PORT=$COURSE_B_PORT npx @marp-team/marp-cli --server "$COURSE_DIR/223015b/slides/" & PID_B=$! sleep 3 # Stagger starts to avoid WebSocket port collision PORT=$COURSE_C_PORT npx @marp-team/marp-cli --server "$COURSE_DIR/223015c/slides/" & PID_C=$! # Wait for any process to exit wait