Advertisement
Serafim

Untitled

Nov 24th, 2014
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.42 KB | None | 0 0
  1. <?php
  2. namespace Quark\Model;
  3.  
  4. use Carbon\Carbon;
  5. use Quark\Socket\Model;
  6. use Quark\Socket\Client\MessagesTrait;
  7. use Quark\Socket\Client\ConnectionTrait;
  8. use Michelf\MarkdownExtra;
  9. use Message;
  10. use Config;
  11. use User;
  12.  
  13.  
  14. class Client extends Model
  15. {
  16.     use MessagesTrait,
  17.         ConnectionTrait;
  18.  
  19.     protected $user;
  20.  
  21.     public function __construct($connection)
  22.     {
  23.         parent::__construct($connection);
  24.  
  25.         $u = User::where('ip', '=', $connection->remoteAddress)->first();
  26.         if (!$u) {
  27.             $u = new User;
  28.             $u->ip = $connection->remoteAddress;
  29.             $u->login = ['Пингвин', 'Барсук', 'Суслик', 'Верблюд', 'Слон', 'Чупакабра'][mt_rand(0, 5)];
  30.             $u->avatar = '';
  31.             $u->save();
  32.             $u = User::where('id', '=', $u->id)->first();
  33.         }
  34.  
  35.         $this->addTimeout(1, function(){
  36.             $this->enter();
  37.         });
  38.         $this->user = $u;
  39.     }
  40.  
  41.     protected function enter()
  42.     {
  43.         $this->getMessages();
  44.         $this->sendNewUserInfo();
  45.  
  46.         $this->send([
  47.             'message' => $this->getSystemMessage('Вы присоединились к чату. Привет ' . $this->user->login . '!')
  48.         ]);
  49.     }
  50.  
  51.     protected function getSystemMessage($text)
  52.     {
  53.         return [
  54.             'id' => 0,
  55.             'user_id' => 0,
  56.             'type' => Message::TYPE_SYSTEM,
  57.             'user' => [
  58.                 'login' => 'system'
  59.             ],
  60.             'message' => $text,
  61.             'created_at' => Carbon::now()->toDateTimeString()
  62.         ];
  63.     }
  64.  
  65.     protected function sendNewUserInfo()
  66.     {
  67.         static::eachNot($this->getId(), function($client) {
  68.             #$client->send(['message' => $this->getSystemMessage('=> Присоединился пользователь ' . $this->user->login)]);
  69.        });
  70.     }
  71.  
  72.     public function message($data)
  73.     {
  74.         try {
  75.             $message = new Message();
  76.             $message->user_id = $this->user->id;
  77.             $message->message = $data;
  78.             $message->save();
  79.         } catch (\Exception $e) {
  80.             $this->error(self::ERROR_ARGS, $e->getMessage() .
  81.                 '   (' . $e->getFile() . ':' . $e->getLine() . ')');
  82.             return null;
  83.         }
  84.  
  85.         static::each(function($client) use ($message) {
  86.             $client->send([
  87.                 'message' => Message::with('user')->where('id', '=', $message->id)->first()
  88.             ]);
  89.         });
  90.     }
  91.  
  92.     public function getMessages()
  93.     {
  94.         $this->send([
  95.             'messages' => Message::with('user')
  96.                 ->limit(20)
  97.                 ->orderBy('created_at', 'asc')
  98.                 ->get()
  99.                 ->toArray()
  100.         ]);
  101.     }
  102.  
  103.     public function getConnections()
  104.     {
  105.         $this->send([
  106.             'connections' => self::connections()
  107.         ]);
  108.         $this->send([
  109.             'message' =>
  110.                 $this->getSystemMessage('Пользователей онлайн: ' . self::connections())
  111.         ]);
  112.     }
  113.  
  114.     public function onClose()
  115.     {
  116.         static::eachNot($this->getId(), function($client) {
  117.             #$client->send([
  118.            #    'message' => $this->getSystemMessage('<= Пользователь ' . $this->user->login . ' покинул этот мир!')
  119.            #]);
  120.        });
  121.         parent::onClose();
  122.     }
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement