public function onMessage(ConnectionInterface $socket, $data) { try { // mesaj gönderen client'i bul $sender = $this->findClientByConnection($socket); // mesaj içeriğini al $msg = json_decode($data); if (!$msg) { return; } // mesaj boşsa çık if (!isset($msg->topic)) { return; } // mesaj başlığı yoksa çık // mesaj başlığına göre işlem yapılacak switch ($msg->topic) { // login bildirimi case 'login': $this->console("Login mesajı geldi.", "comment"); try { // user'ı bul $user = User::findOrFail($msg->data->user_id); $sender->user = $user; $sender->user->setOnline(); $this->console("User {$user->name} bağlandı."); // bağlı kullanıcıların listesini gönder $this->sendUsersList(); // genel mesaj geçmişini gönder $this->sendMessageLogTo($sender); } catch (Exception $e) { $this->console("User bulunamadı", "error"); } break; // kullanıcıdan gelen mesaj // kullanıcıdan gelen mesaj case 'new_message': foreach ($msg->data->to_id as $to_id) { // Gönderlen kişi alanı boşsa null yap. if (!@$to_id) { $to_id = null; } // mesaj geçmişine kaydet $message = Message::create(['from_id' => $sender->user->id, 'to_id' => $to_id, 'message' => $msg->data->message]); // login olmuş kullanıcılara gelen mesajı ilet if ($to_id == null) { foreach ($this->clients as $client) { if ($client->isLoggedIn()) { $client->send(['topic' => 'messages', 'data' => [$message]]); } } } else { // iki kişi arasında özel mesaj $to_client = $this->findClientByUserId($to_id); $sender->send(['topic' => 'messages', 'data' => [$message]]); if ($to_client) { $to_client->send(['topic' => 'messages', 'data' => [$message]]); } else { $this->console("User Bulunamadı ({$to_id}) !!", "error"); } } } break; // kullanıcı mesaj geçmişini istediğinde // kullanıcı mesaj geçmişini istediğinde case 'request': $this->sendMessageLogTo($sender, @$msg->data->with_id ?: null); break; default: break; } } catch (Exception $e) { $this->console($e->getMessage(), "error"); Log::info($e); } }
<?php use Chat\Message; function __autoload($class) { $path = str_replace('\\', DIRECTORY_SEPARATOR, $class); if (file_exists(".." . DIRECTORY_SEPARATOR . "class" . DIRECTORY_SEPARATOR . $path . ".php")) { require_once ".." . DIRECTORY_SEPARATOR . "class" . DIRECTORY_SEPARATOR . $path . ".php"; } } session_start(); if (Message::isValid($_POST)) { $message = Message::create($_POST); $_SESSION["auteur"] = $message->getAuteur(); if ($message->save()) { $_SESSION["messages"]["success"][] = "Votre message est envoyé."; } else { $_SESSION["messages"]["danger"][] = "Une erreur est survenue lors de l'enregistrement du message."; } } else { $_SESSION["messages"]["danger"][] = "Votre message n'est pas valide."; } header('Location: index.php');