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);
     }
 }
예제 #2
0
<?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');