Connection public function __construct() { $this->clients = new \SplObjectStorage; $this->users = []; echo "WebSocket Server gestartet...\n"; } public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "Neue Verbindung: {$conn->resourceId}\n"; } public function onMessage(ConnectionInterface $from, $msg) { $data = json_decode($msg, true); if (!$data) return; switch($data['type']) { case 'init': // UserID mit Verbindung speichern $userId = $data['userId']; $this->users[$userId] = $from; $from->userId = $userId; echo "User $userId registriert.\n"; break; case 'message': $senderId = $data['senderId']; $receiverId = $data['receiverId']; $message = $data['message']; // In DB speichern $this->saveMessage($senderId, $receiverId, $message); // Nachricht an Empfänger senden, falls verbunden if (isset($this->users[$receiverId])) { $this->users[$receiverId]->send(json_encode([ 'type' => 'new_message', 'senderId' => $senderId, 'message' => $message ])); } // Optional: Bestätigung an Sender, falls nötig break; } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); if (isset($conn->userId)) { unset($this->users[$conn->userId]); } echo "Verbindung {$conn->resourceId} geschlossen.\n"; } public function onError(ConnectionInterface $conn, \Exception $e) { echo "Fehler: {$e->getMessage()}\n"; $conn->close(); } protected function saveMessage($senderId, $receiverId, $message) { $db = new mysqli("localhost","root","","projekte"); // Passe DB-Daten an if ($db->connect_error) { echo "DB Fehler: " . $db->connect_error; return false; } $stmt = $db->prepare("INSERT INTO chat (user_sender, user_empfaenger, nachricht) VALUES (?, ?, ?)"); $stmt->bind_param("iis", $senderId, $receiverId, $message); $stmt->execute(); $stmt->close(); $db->close(); } } // Server starten use Ratchet\Server\IoServer; use Ratchet\Http\HttpServer; use Ratchet\WebSocket\WsServer; $server = IoServer::factory( new HttpServer( new WsServer( new ChatServer() ) ), 8080 // Port ); $server->run();