You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.3 KiB

  1. <?php
  2. namespace App;
  3. use App\Message;
  4. class MessageBuffer
  5. {
  6. protected static $instance;
  7. private $_models = null;
  8. private $_calls = null;
  9. public static function getInstance()
  10. {
  11. if (!isset(self::$instance)) {
  12. self::$instance = new self();
  13. }
  14. return self::$instance;
  15. }
  16. public function __construct()
  17. {
  18. $this->_models = collect();
  19. $this->_calls = collect();
  20. }
  21. public function save()
  22. {
  23. if ($this->_models->isNotEmpty()) {
  24. try {
  25. Message::insert($this->_models->toArray());
  26. } catch (\Exception $e) {
  27. \Utils::error($e->getMessage());
  28. }
  29. $this->_models = collect();
  30. }
  31. if ($this->_calls->isNotEmpty()) {
  32. $this->_calls->each(function ($call) {
  33. $call();
  34. });
  35. $this->_calls = collect();
  36. }
  37. }
  38. public function append(Message $message, $call)
  39. {
  40. if ($message->created_at == null && $message->updated_at == null) {
  41. $this->_models[$message->jidfrom.$message->id] = $message->toRawArray();
  42. $this->_calls->push($call);
  43. } else {
  44. $message->save();
  45. $call();
  46. }
  47. }
  48. }