Add Linux compatibility for LoginServer
- Updated main.cpp with platform-specific code for Windows/Linux - Modified stdafx.h to include Linux headers and definitions - Updated signal_handler.cpp for cross-platform signal handling - Added Linux-compatible types and macros - Created CMakeLists.txt for Linux build system - Added build.sh script for automated building - Added loginserver.sh script for server management - Created comprehensive README_LINUX.md with deployment instructions - All changes maintain Windows compatibility using preprocessor directives
This commit is contained in:
@@ -0,0 +1,251 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Knight Online Login Server Linux Startup Script
|
||||
# Author: Levent Ferrah
|
||||
# Description: Startup script for Knight Online Login Server on Linux
|
||||
|
||||
# Set script directory
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# Configuration
|
||||
SERVER_NAME="LoginServer"
|
||||
BINARY_PATH="./bin/LoginServer"
|
||||
LOG_DIR="./Logs"
|
||||
PID_FILE="./loginserver.pid"
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Functions
|
||||
log_message() {
|
||||
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] ERROR:${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')] SUCCESS:${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] WARNING:${NC} $1"
|
||||
}
|
||||
|
||||
# Check if server is running
|
||||
is_running() {
|
||||
if [ -f "$PID_FILE" ]; then
|
||||
PID=$(cat "$PID_FILE")
|
||||
if ps -p $PID > /dev/null 2>&1; then
|
||||
return 0
|
||||
else
|
||||
rm -f "$PID_FILE"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# Start server
|
||||
start_server() {
|
||||
log_message "Starting Knight Online Login Server..."
|
||||
|
||||
if is_running; then
|
||||
log_warning "Login Server is already running (PID: $(cat $PID_FILE))"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check if binary exists
|
||||
if [ ! -f "$BINARY_PATH" ]; then
|
||||
log_error "Binary not found: $BINARY_PATH"
|
||||
log_message "Please compile the server first using: ./build.sh"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Create log directory
|
||||
mkdir -p "$LOG_DIR"
|
||||
|
||||
# Check configuration file
|
||||
if [ ! -f "./LogIn.ini" ]; then
|
||||
log_warning "Configuration file LogIn.ini not found!"
|
||||
log_message "Creating default configuration..."
|
||||
create_default_config
|
||||
fi
|
||||
|
||||
# Start server in background
|
||||
nohup "$BINARY_PATH" > "$LOG_DIR/server_output.log" 2>&1 &
|
||||
SERVER_PID=$!
|
||||
|
||||
# Save PID
|
||||
echo $SERVER_PID > "$PID_FILE"
|
||||
|
||||
# Wait a moment and check if it started successfully
|
||||
sleep 2
|
||||
if is_running; then
|
||||
log_success "Login Server started successfully (PID: $SERVER_PID)"
|
||||
log_message "Server output: $LOG_DIR/server_output.log"
|
||||
return 0
|
||||
else
|
||||
log_error "Failed to start Login Server"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Stop server
|
||||
stop_server() {
|
||||
log_message "Stopping Knight Online Login Server..."
|
||||
|
||||
if ! is_running; then
|
||||
log_warning "Login Server is not running"
|
||||
return 1
|
||||
fi
|
||||
|
||||
PID=$(cat "$PID_FILE")
|
||||
log_message "Sending SIGTERM to process $PID..."
|
||||
|
||||
kill -TERM $PID
|
||||
|
||||
# Wait for graceful shutdown
|
||||
for i in {1..10}; do
|
||||
if ! is_running; then
|
||||
log_success "Login Server stopped successfully"
|
||||
rm -f "$PID_FILE"
|
||||
return 0
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
# Force kill if necessary
|
||||
log_warning "Graceful shutdown failed, forcing kill..."
|
||||
kill -KILL $PID 2>/dev/null
|
||||
rm -f "$PID_FILE"
|
||||
log_success "Login Server forcefully stopped"
|
||||
}
|
||||
|
||||
# Restart server
|
||||
restart_server() {
|
||||
log_message "Restarting Knight Online Login Server..."
|
||||
stop_server
|
||||
sleep 2
|
||||
start_server
|
||||
}
|
||||
|
||||
# Show server status
|
||||
status_server() {
|
||||
if is_running; then
|
||||
PID=$(cat "$PID_FILE")
|
||||
log_success "Login Server is running (PID: $PID)"
|
||||
|
||||
# Show some process info
|
||||
echo ""
|
||||
echo "Process Information:"
|
||||
ps -p $PID -o pid,ppid,cmd,start,etime
|
||||
|
||||
# Show listening ports
|
||||
echo ""
|
||||
echo "Listening Ports:"
|
||||
ss -tlnp | grep $PID 2>/dev/null || echo "No listening ports found"
|
||||
|
||||
else
|
||||
log_error "Login Server is not running"
|
||||
fi
|
||||
}
|
||||
|
||||
# View logs
|
||||
view_logs() {
|
||||
if [ -f "$LOG_DIR/server_output.log" ]; then
|
||||
tail -f "$LOG_DIR/server_output.log"
|
||||
else
|
||||
log_error "Log file not found: $LOG_DIR/server_output.log"
|
||||
fi
|
||||
}
|
||||
|
||||
# Create default configuration
|
||||
create_default_config() {
|
||||
cat > LogIn.ini << EOF
|
||||
[DOWNLOAD]
|
||||
URL=ftp.yoursite.net
|
||||
PATH=/
|
||||
|
||||
[ODBC]
|
||||
DSN=KO_MAIN
|
||||
UID=username
|
||||
PWD=password
|
||||
|
||||
[SETTINGS]
|
||||
PORT=15100
|
||||
|
||||
[SERVER_LIST]
|
||||
COUNT=1
|
||||
SERVER_00=127.0.0.1
|
||||
LANIP_00=127.0.0.1
|
||||
NAME_00=Test Server
|
||||
ID_00=1
|
||||
GROUPID_00=1
|
||||
PREMLIMIT_00=1000
|
||||
FREELIMIT_00=1000
|
||||
KING1_00=
|
||||
KING2_00=
|
||||
KINGMSG1_00=
|
||||
KINGMSG2_00=
|
||||
|
||||
[NEWS]
|
||||
TITLE_00=Welcome to Knight Online
|
||||
MESSAGE_00=Welcome to our Knight Online server!
|
||||
TITLE_01=
|
||||
MESSAGE_01=
|
||||
TITLE_02=
|
||||
MESSAGE_02=
|
||||
EOF
|
||||
log_success "Default configuration created: LogIn.ini"
|
||||
}
|
||||
|
||||
# Main script
|
||||
case "$1" in
|
||||
start)
|
||||
start_server
|
||||
;;
|
||||
stop)
|
||||
stop_server
|
||||
;;
|
||||
restart)
|
||||
restart_server
|
||||
;;
|
||||
status)
|
||||
status_server
|
||||
;;
|
||||
logs)
|
||||
view_logs
|
||||
;;
|
||||
config)
|
||||
create_default_config
|
||||
;;
|
||||
*)
|
||||
echo "Knight Online Login Server Management Script"
|
||||
echo ""
|
||||
echo "Usage: $0 {start|stop|restart|status|logs|config}"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " start - Start the login server"
|
||||
echo " stop - Stop the login server"
|
||||
echo " restart - Restart the login server"
|
||||
echo " status - Show server status"
|
||||
echo " logs - View server logs (real-time)"
|
||||
echo " config - Create default configuration file"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 start # Start the server"
|
||||
echo " $0 status # Check if server is running"
|
||||
echo " $0 logs # Watch server logs"
|
||||
echo ""
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit $?
|
||||
Reference in New Issue
Block a user