Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace Quark\Model;
- use Carbon\Carbon;
- use Quark\Socket\Model;
- use Quark\Socket\Client\MessagesTrait;
- use Quark\Socket\Client\ConnectionTrait;
- use Michelf\MarkdownExtra;
- use Message;
- use Config;
- use User;
- class Client extends Model
- {
- use MessagesTrait,
- ConnectionTrait;
- protected $user;
- public function __construct($connection)
- {
- parent::__construct($connection);
- $u = User::where('ip', '=', $connection->remoteAddress)->first();
- if (!$u) {
- $u = new User;
- $u->ip = $connection->remoteAddress;
- $u->login = ['Пингвин', 'Барсук', 'Суслик', 'Верблюд', 'Слон', 'Чупакабра'][mt_rand(0, 5)];
- $u->avatar = '';
- $u->save();
- $u = User::where('id', '=', $u->id)->first();
- }
- $this->addTimeout(1, function(){
- $this->enter();
- });
- $this->user = $u;
- }
- protected function enter()
- {
- $this->getMessages();
- $this->sendNewUserInfo();
- $this->send([
- 'message' => $this->getSystemMessage('Вы присоединились к чату. Привет ' . $this->user->login . '!')
- ]);
- }
- protected function getSystemMessage($text)
- {
- return [
- 'id' => 0,
- 'user_id' => 0,
- 'type' => Message::TYPE_SYSTEM,
- 'user' => [
- 'login' => 'system'
- ],
- 'message' => $text,
- 'created_at' => Carbon::now()->toDateTimeString()
- ];
- }
- protected function sendNewUserInfo()
- {
- static::eachNot($this->getId(), function($client) {
- #$client->send(['message' => $this->getSystemMessage('=> Присоединился пользователь ' . $this->user->login)]);
- });
- }
- public function message($data)
- {
- try {
- $message = new Message();
- $message->user_id = $this->user->id;
- $message->message = $data;
- $message->save();
- } catch (\Exception $e) {
- $this->error(self::ERROR_ARGS, $e->getMessage() .
- ' (' . $e->getFile() . ':' . $e->getLine() . ')');
- return null;
- }
- static::each(function($client) use ($message) {
- $client->send([
- 'message' => Message::with('user')->where('id', '=', $message->id)->first()
- ]);
- });
- }
- public function getMessages()
- {
- $this->send([
- 'messages' => Message::with('user')
- ->limit(20)
- ->orderBy('created_at', 'asc')
- ->get()
- ->toArray()
- ]);
- }
- public function getConnections()
- {
- $this->send([
- 'connections' => self::connections()
- ]);
- $this->send([
- 'message' =>
- $this->getSystemMessage('Пользователей онлайн: ' . self::connections())
- ]);
- }
- public function onClose()
- {
- static::eachNot($this->getId(), function($client) {
- #$client->send([
- # 'message' => $this->getSystemMessage('<= Пользователь ' . $this->user->login . ' покинул этот мир!')
- #]);
- });
- parent::onClose();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement