face_room.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 2018/8/16
  6. * Time: 下午5:03
  7. */
  8. namespace room;
  9. use uniquer;
  10. use Log;
  11. class face_item
  12. {
  13. const user_count = 50;
  14. private $mParams;
  15. public function __construct($params) {
  16. $this->mParams = $params;
  17. }
  18. public function face_id() {
  19. return intval($this->mParams['face_id']);
  20. }
  21. public function hasroom() {
  22. return $this->room_id() > 0;
  23. }
  24. public function room_id() {
  25. return intval($this->mParams['room_id']);
  26. }
  27. public function users()
  28. {
  29. $unique = new uniquer();
  30. if($this->room_id() === 0)
  31. {
  32. if(empty($this->mParams['users'])) return $unique;
  33. $users = explode(',',$this->mParams['users']);
  34. foreach ($users as $user) {
  35. $unique->add_value($user);
  36. }
  37. }
  38. else
  39. {
  40. $mod_room = Model('room');
  41. $items = $mod_room->getRoomParts(['room_id' => $this->room_id(),'state' => 0],'member_id',self::user_count);
  42. foreach ($items as $item) {
  43. $unique->add_value(intval($item['member_id']));
  44. }
  45. }
  46. return $unique;
  47. }
  48. }
  49. class face_room
  50. {
  51. private $mCode;
  52. private $mLochash;
  53. private $mModRoom;
  54. private $mFaceItem;
  55. public function __construct($code,$lochash)
  56. {
  57. $this->mCode = $code;
  58. $this->mLochash = $lochash;
  59. $this->mModRoom = Model('room');
  60. $this->mFaceItem = null;
  61. }
  62. public function find($user)
  63. {
  64. $item = $this->mModRoom->findFace(['lochash' => $this->mLochash,'check_code' => $this->mCode]);
  65. if(empty($item)) {
  66. $this->mModRoom->createFace($this->mLochash,$this->mCode);
  67. $item = $this->mModRoom->findFace(['lochash' => $this->mLochash,'check_code' => $this->mCode]);
  68. }
  69. if(empty($item)) return false;
  70. $this->mFaceItem = new face_item($item);
  71. $unique = $this->mFaceItem->users();
  72. if($unique->add_value($user)) {
  73. $users = $unique->values();
  74. $fact_id = $this->mFaceItem->face_id();
  75. $strusers = implode(',',$users);
  76. $this->mModRoom->editFace(['face_id' => $fact_id],['users' => $strusers]);
  77. } else {
  78. $users = $unique->values();
  79. }
  80. return $users;
  81. }
  82. public function join($user)
  83. {
  84. if($this->find($user) === false) return false;
  85. if($this->mFaceItem->hasroom()) {
  86. Log::record("join hasroom true",Log::DEBUG);
  87. return $this->mFaceItem->room_id();
  88. }
  89. else
  90. {
  91. $ret = factory_client::instance()->create_chat($user);
  92. if($ret == false) {
  93. Log::record("join create_chat error",Log::ERR);
  94. return false;
  95. } else {
  96. $room_id = $ret['room'];
  97. $fact_id = $this->mFaceItem->face_id();
  98. $this->mModRoom->editFace(['face_id' => $fact_id],['room_id' => $room_id]);
  99. return $room_id;
  100. }
  101. }
  102. }
  103. public function leave($user)
  104. {
  105. if($this->find($user) === false) return false;
  106. if($this->mFaceItem->hasroom()) {
  107. return true;
  108. }
  109. else
  110. {
  111. $fact_id = $this->mFaceItem->face_id();
  112. $unique = $this->mFaceItem->users();
  113. $unique->remove_value($user);
  114. $users = $unique->values();
  115. $strusers = implode(',',$users);
  116. $this->mModRoom->editFace(['face_id' => $fact_id],['users' => $strusers]);
  117. return true;
  118. }
  119. }
  120. }