瀏覽代碼

debug room

stanley-king 7 年之前
父節點
當前提交
37e8a4d17d

+ 0 - 1
centra_srv.php

@@ -8,7 +8,6 @@ require_once (BASE_ROOT_PATH . '/helper/search/server.php');
 require_once (BASE_ROOT_PATH . '/helper/search/processor.php');
 require_once (BASE_ROOT_PATH . '/helper/search/event_handler.php');
 require_once (BASE_ROOT_PATH . '/helper/search/util.php');
-
 require_once (BASE_ROOT_PATH . '/helper/category_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/brand_helper.php');
 require_once (BASE_ROOT_PATH . '/helper/goods/commonid_helper.php');

+ 4 - 0
data/model/room.model.php

@@ -31,4 +31,8 @@ class roomModel extends Model
         return $this->table('room_participant')->insert(['room_id' => $room_id,'member_id' => $user,
             'room_key' => $room_key,'invite_time' => time(),'join_time' => 0,'jointimes' => 0,'state' => 0]);
     }
+    public function getRoom($roomid)
+    {
+        return $this->table('room')->field('*')->where(['room_id' => $roomid])->limit(1)->find();
+    }
 }

+ 60 - 0
helper/room/access_client.php

@@ -0,0 +1,60 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2017/12/24
+ * Time: 下午1:05
+ */
+
+namespace room;
+use search\tcp_client;
+
+class access_client extends tcp_client
+{
+    protected static $stInstance;
+
+    public function __construct()
+    {
+        parent::__construct();
+        $this->mBodyType = tcp_client::JsonType;
+    }
+
+    public static function instance()
+    {
+        if(self::$stInstance == null) {
+            self::$stInstance = new factory_client();
+        }
+        return self::$stInstance;
+    }
+
+    public function __destruct()
+    {
+        parent::__destruct();
+    }
+
+    public function remote_addr()
+    {
+        global $config;
+
+        $host = $config['room']['host'];
+        $port = $config['room']['port'];
+        return "{$host}:{$port}";
+    }
+
+    public function join($room,$room_key)
+    {
+        $param = ["act" => 'factory','op' => 'create', "type" => 'bargain','params' => ['goods_id' => $goods_id,'user' => $user]];
+
+        $result = $this->request($param);
+        if(empty($result)) return false;
+
+        $code = intval($result['code']);
+        if($code != 200) {
+            return false;
+        }
+        else {
+            return true;
+        }
+    }
+
+}

+ 0 - 30
helper/room/bargain.php

@@ -1,30 +0,0 @@
-<?php
-/**
- * Created by PhpStorm.
- * User: stanley-king
- * Date: 2017/12/14
- * Time: 下午6:18
- */
-
-namespace room;
-
-
-class bargain extends croom
-{
-    protected function __construct($rommid)
-    {
-        $this->mRoomType = 'bargain';
-        $participants = self::init($rommid);
-        parent::__construct($rommid,$participants);
-    }
-
-    private function init($roomid)
-    {
-        return [];
-    }
-
-    public static function build($params)
-    {
-
-    }
-}

+ 19 - 0
helper/room/bargain_room.php

@@ -0,0 +1,19 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2017/12/14
+ * Time: 下午6:18
+ */
+
+namespace room;
+
+
+class bargain_room extends base_room
+{
+    public function __construct($cinfos, $roomkeys = [])
+    {
+        parent::__construct($cinfos,$roomkeys);
+        $this->mRoomType = 'bargain';
+    }
+}

+ 228 - 0
helper/room/base_room.php

@@ -0,0 +1,228 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2017/12/14
+ * Time: 下午5:47
+ */
+
+namespace room;
+
+use member_info;
+use Log;
+
+abstract class base_room extends base_info
+{
+    protected $mRoomid;
+    protected $mRoomkeys; //每个人都有一个唯一的roomkey
+    protected $mRoomType;
+    protected $mod_room;
+    protected $mAccReq;
+    protected $mCurRespMsgs;
+
+    public function __construct($cinfos, $roomkeys = [])
+    {
+        parent::__construct($cinfos);
+
+        $this->mAccReq = false;
+        $this->mRoomid = $this->room_id();
+        $this->mCurRespMsgs['return'] = [];
+        $this->mCurRespMsgs['broadcast'] = [];
+
+        $this->mRoomkeys = $roomkeys;
+        $this->mod_room = Model('room');
+    }
+
+    public function inviteOp($input)
+    {
+        $this->clear();
+
+        $this->mAccReq = false;
+        $userid = intval($input['user']);
+        if($userid > 0) {
+            $room_key = $this->invite($userid);
+            $ret = ['room_key' => $room_key,'room' => $this->mRoomid];
+
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    public function invite($userid)
+    {
+        $item = Model('member')->getMemberInfo(['member_id' => $userid]);
+        if(empty($item)) return false;
+
+        $uinfo = new member_info($item);
+        $participant = $this->room_key($uinfo->unionid());
+        $ret = $this->find($participant);
+        if($ret == false)
+        {
+
+            $ret = $this->mod_room->invite($this->room_id(),$userid,$participant);
+            if($ret == false) {
+                Log::record(__METHOD__ . " invite error",Log::ERR);
+                return false;
+            }
+            else {
+                $this->mRoomkeys[$participant] = ['active' => false,
+                    'nickname' => $uinfo->nickname(),'avatar' => $uinfo->avatar(),'userid' => intval($userid)];
+            }
+        }
+        return $participant;
+    }
+
+    public function reject($roomkey)
+    {
+        $ret = $this->find($roomkey);
+        if($ret != false) {
+            unset($this->mRoomkeys[$roomkey]);
+        }
+        return true;
+    }
+
+    private function room_info($roomkey)
+    {
+        $result = [];
+        $result['room'] = $this->mRoomid;
+        $result['users'] = [];
+        foreach ($this->mRoomkeys as $key => $item)
+        {
+            $result['users'][] = $item;
+            if($key == $roomkey) {
+                $result['me'] = $item['userid'];
+            }
+        }
+
+        return $result;
+    }
+
+    private function all_users()
+    {
+        $result = [];
+        foreach ($this->mRoomkeys as $key => $item) {
+            $result[] = $key;
+        }
+        return $result;
+    }
+
+    public function joinOp($input)
+    {
+        $this->clear();
+
+        $room_key = $input['room_key'];
+        if(empty($room_key)) {
+            return false;
+        }
+
+        $this->mAccReq = true;
+        if($this->join($room_key))
+        {
+            $this->add_return([$room_key],'room_info',$this->room_info($room_key));
+            $this->add_broad('join',$this->mRoomkeys[$room_key]);
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+
+    public function return_msgs()
+    {
+        return $this->mCurRespMsgs['return'];
+    }
+    public function broadcast_msgs()
+    {
+        return $this->mCurRespMsgs['broadcast'];
+    }
+
+    protected function clear()
+    {
+        $this->mCurRespMsgs['return'] = [];
+        $this->mCurRespMsgs['broadcast'] = [];
+    }
+
+    protected function add_return(array $roomkeys,$op,$content)
+    {
+        $msg = [];
+        $msg['receivers'] = ['type' => 'roomkey', 'users' => $roomkeys];
+        $msg['room'] = $this->mRoomid;
+        $msg['act']  = "room";
+        $msg['op']   = "broadcast";
+
+        $msg['body']['act']  = 'room';
+        $msg['body']['op']   = $op;
+        $msg['body']['room'] = $this->mRoomid;
+        $msg['body']['content'] = $content;
+
+        $this->mCurRespMsgs['return'][] = $msg;
+    }
+
+    protected function add_broad($op,$content)
+    {
+        $msg = [];
+        $msg['receivers'] = ['type' => 'broadcast'];
+        $msg['room'] = $this->mRoomid;
+        $msg['act']  = "room";
+        $msg['op']   = "broadcast";
+
+        $msg['body']['act']  = 'room';
+        $msg['body']['op']   = $op;
+        $msg['body']['room'] = $this->mRoomid;
+        $msg['body']['content'] = $content;
+
+        $this->mCurRespMsgs['broadcast'][] = $msg;
+    }
+
+    public function acc_req() {
+        return $this->mAccReq;
+    }
+
+    public function join($participant)
+    {
+        $ret = $this->find($participant);
+        if($ret != false) {
+            $this->mRoomkeys[$participant]['active'] = true;
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    public function leave($participant)
+    {
+        $ret = $this->find($participant);
+        if($ret != false) {
+            $this->mRoomkeys[$participant]['active'] = false;
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    protected function find($participant)
+    {
+        if(empty($participant)) return false;
+
+        if(array_key_exists($participant,$this->mRoomkeys)) {
+            return $this->mRoomkeys[$participant];
+        } else {
+            return false;
+        }
+    }
+
+    protected function room_key($unionid)
+    {
+        return md5("{$this->mRoomType}_{$this->mRoomid}_{$unionid}");
+    }
+
+    public function room_type() {
+        return $this->mRoomType;
+    }
+
+
+    public function cur_msgs() {
+        return $this->mCurRespMsgs;
+    }
+}

+ 0 - 28
helper/room/chat.php

@@ -1,28 +0,0 @@
-<?php
-/**
- * Created by PhpStorm.
- * User: stanley-king
- * Date: 2017/12/18
- * Time: 下午4:34
- */
-
-namespace room;
-
-
-class chat extends croom
-{
-    protected function __construct($rommid,$participants)
-    {
-        $this->mRoomType = proto_type::act_chat;
-        parent::__construct($rommid,$participants);
-    }
-
-    public static function build($room_id)
-    {
-        $participants = croom::participants($room_id);
-        if($participants === false) return false;
-
-        $chat = new chat($room_id,$participants);
-        return $chat;
-    }
-}

+ 19 - 0
helper/room/chatwo_room.php

@@ -0,0 +1,19 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2017/12/18
+ * Time: 下午4:34
+ */
+
+namespace room;
+
+
+class chatwo_room extends base_room
+{
+    public function __construct($cinfos, $roomkeys = [])
+    {
+        $this->mRoomType = 'chatwo';
+        parent::__construct($cinfos,$roomkeys);
+    }
+}

+ 0 - 218
helper/room/croom.php

@@ -1,218 +0,0 @@
-<?php
-/**
- * Created by PhpStorm.
- * User: stanley-king
- * Date: 2017/12/14
- * Time: 下午5:47
- */
-
-namespace room;
-
-use member_info;
-use Log;
-
-abstract class croom
-{
-    protected $mRoomid;
-    protected $mParticipants;
-    protected $mRoomType;
-    protected $mod_room;
-    protected $mAccReq;
-
-    protected function __construct($rommid,$participants = [])
-    {
-        $this->mAccReq = false;
-        $this->mRoomid = $rommid;
-        $this->mParticipants = $participants;
-        $this->mod_room = Model('room');
-    }
-    public function inviteOp($input)
-    {
-        $this->mAccReq = false;
-        $userid = intval($input['user']);
-        if($userid > 0) {
-            $room_key = $this->invite($userid);
-            return ['room_key' => $room_key,'room' => $this->mRoomid];
-        } else {
-            return false;
-        }
-    }
-
-    public function invite($userid)
-    {
-        $item = Model('member')->getMemberInfo(['member_id' => $userid]);
-        if(empty($item)) return false;
-
-        $uinfo = new member_info($item);
-        $participant = $this->room_key($uinfo->unionid());
-        $ret = $this->find($participant);
-        if($ret == false)
-        {
-
-            $ret = $this->mod_room->invite($this->room_id(),$userid,$participant);
-            if($ret == false) {
-                Log::record(__METHOD__ . " invite error",Log::ERR);
-                return false;
-            }
-            else {
-                $this->mParticipants[$participant] = ['active' => false,
-                    'nickname' => $uinfo->nickname(),'avatar' => $uinfo->avatar(),'userid' => intval($userid)];
-            }
-        }
-        return $participant;
-    }
-
-    public function reject($participant)
-    {
-        $ret = $this->find($participant);
-        if($ret != false) {
-            unset($this->mParticipants[$participant]);
-        }
-        return true;
-    }
-
-    private function room_info($participant)
-    {
-        $result = [];
-        $result['room'] = $this->mRoomid;
-        $result['users'] = [];
-        foreach ($this->mParticipants as $key => $item)
-        {
-            $result['users'][] = $item;
-            if($key == $participant) {
-                $result['me'] = $item['userid'];
-            }
-        }
-
-        return $result;
-    }
-
-    private function all_users()
-    {
-        $result = [];
-        foreach ($this->mParticipants as $key => $item) {
-            $result[] = $key;
-        }
-        return $result;
-    }
-
-    public function joinOp($input)
-    {
-        $participant = $input['room_key'];
-        if(empty($participant)) {
-            return false;
-        }
-
-        $this->mAccReq = true;
-        if($this->join($participant))
-        {
-            $msgs = [];
-            {
-                $msg = [];
-                $msg['receivers'][] = $participant;
-
-                $msg['body']['op']   = 'room_info';
-                $msg['body']['room'] = $this->mRoomid;
-                $msg['body']['content'] = $this->room_info($participant);
-                $msgs[] = $msg;
-            }
-            {
-                $msg = [];
-                $msg['receivers'] = $this->all_users();
-
-                $msg['body']['op']   = 'join';
-                $msg['body']['room'] = $this->mRoomid;
-                $msg['body']['content'] = $this->mParticipants[$participant];
-                $msgs[] = $msg;
-            }
-            return $msgs;
-        }
-        else {
-            return false;
-        }
-    }
-    public function acc_req() {
-        return $this->mAccReq;
-    }
-
-    public function join($participant)
-    {
-        $ret = $this->find($participant);
-        if($ret != false) {
-            $this->mParticipants[$participant]['active'] = true;
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    public function leave($participant)
-    {
-        $ret = $this->find($participant);
-        if($ret != false) {
-            $this->mParticipants[$participant]['active'] = false;
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    protected function find($participant)
-    {
-        if(empty($participant)) return false;
-
-        if(array_key_exists($participant,$this->mParticipants)) {
-            return $this->mParticipants[$participant];
-        } else {
-            return false;
-        }
-    }
-
-    protected function room_key($unionid)
-    {
-        return md5("{$this->mRoomType}_{$this->mRoomid}_{$unionid}");
-    }
-
-    public function room_type() {
-        return $this->mRoomType;
-    }
-
-    public function room_id() {
-        return $this->mRoomid;
-    }
-
-    public static function participants($roomid)
-    {
-        $roomid = intval($roomid);
-        if($roomid <= 0) return false;
-
-        $mod_room = Model('room');
-        $items = $mod_room->participants($roomid);
-
-        $key_ids = [];
-        $uids = [];
-        foreach ($items as $item) {
-            $uid = intval($item['member_id']);
-            $room_key  = $item['room_key'];
-            $key_ids[$room_key] = $uid;
-            $uids[] = $uid;
-        }
-
-        $uids = array_unique($uids,SORT_NUMERIC);
-        $members = Model('member')->getMemberList(array('member_id' => array('in',$uids)));
-
-        $uid_infos = [];
-        foreach ($members as $member) {
-            $uinfo = new member_info($member);
-            $user = $uinfo->member_id();
-            $item = ['avatar' => $uinfo->avatar(),'nickname' => $uinfo->nickname(),'userid' => $uinfo->member_id(),'active' => false];
-            $uid_infos[$user] = $item;
-        }
-        $result = [];
-        foreach ($key_ids as $key => $uid) {
-            $result[$key] = $uid_infos[$uid];
-        }
-
-        return $result;
-    }
-}

+ 66 - 13
helper/room/factory.php

@@ -21,37 +21,54 @@ class factory
     public function create($params)
     {
         $type = $params['type'];
-
         if($type == proto_type::act_bargain) {
             return $this->create_bargain($params);
         }
-        elseif($type == proto_type::act_chat) {
-            return $this->create_chat($params);
+        elseif($type == proto_type::act_group) {
+            return $this->create_group($params);
         }
         else {
-            return null;
+            return false;
         }
     }
+
+    public function build($room_id)
+    {
+        $mod_room = Model('room');
+        $room_params = $mod_room->getRoom($room_id);
+        if(empty($room_params)) return false;
+        $participants = self::participants($room_id);
+
+        $rinfo = new base_info($room_params);
+        if($rinfo->type() == proto_type::room_bargain) {
+
+        }
+        elseif ($rinfo->type() == proto_type::room_group) {
+            return new group_room($room_params,$participants);
+        }
+        elseif ($rinfo->type() == proto_type::room_chatwo) {
+        }
+        else {
+            return false;
+        }
+    }
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     private function create_bargain($params)
     {
         return false;
     }
-    private function create_chat($params)
+    private function create_group($params)
     {
         try
         {
             $user = intval($params['creator']);
             if($user <= 0) return false;
             $creator = new member_info($user);
-            $room_type = proto_type::room_chat;
+            $room_type = proto_type::room_group;
+            $room_id = $this->create_room($room_type,'group',$creator);
 
-            $room_id = $this->create_room($room_type,'chat',$creator);
-            if($room_id == false) return false;
-
-            $room = chat::build($room_id);
-            if($room == false) return false;
-
-            return $room;
+            return ['room' => $room_id,'creator' => $user];
         }
         catch (Exception $ex) {
             Log::record(__METHOD__ . " {$ex->getMessage()}",Log::ERR);
@@ -65,4 +82,40 @@ class factory
         $ret = $mod_room->create_room($room_type,$name,$creator->member_id(),$creator->member_id(),$creator->nickname());
         return $ret;
     }
+
+
+    private static function participants($roomid)
+    {
+        $roomid = intval($roomid);
+        if($roomid <= 0) return false;
+
+        $mod_room = Model('room');
+        $items = $mod_room->participants($roomid);
+
+        $key_ids = [];
+        $uids = [];
+        foreach ($items as $item) {
+            $uid = intval($item['member_id']);
+            $room_key  = $item['room_key'];
+            $key_ids[$room_key] = $uid;
+            $uids[] = $uid;
+        }
+
+        $uids = array_unique($uids,SORT_NUMERIC);
+        $members = Model('member')->getMemberList(array('member_id' => array('in',$uids)));
+
+        $uid_infos = [];
+        foreach ($members as $member) {
+            $uinfo = new member_info($member);
+            $user = $uinfo->member_id();
+            $item = ['avatar' => $uinfo->avatar(),'nickname' => $uinfo->nickname(),'userid' => $uinfo->member_id(),'active' => false];
+            $uid_infos[$user] = $item;
+        }
+        $result = [];
+        foreach ($key_ids as $key => $uid) {
+            $result[$key] = $uid_infos[$uid];
+        }
+
+        return $result;
+    }
 }

+ 22 - 6
helper/room/factory_client.php

@@ -24,7 +24,7 @@ class factory_client extends tcp_client
     public static function instance()
     {
         if(self::$stInstance == null) {
-            self::$stInstance = new room_client();
+            self::$stInstance = new factory_client();
         }
         return self::$stInstance;
     }
@@ -43,9 +43,10 @@ class factory_client extends tcp_client
         return "{$host}:{$port}";
     }
 
-    public function create_bargain()
+    public function create_bargain($goods_id,$user)
     {
-        $param = ["act" => 'factory','op' => 'create', "type" => 'bargain','params' => ''];
+        $param = ["act" => 'factory','op' => 'create', "type" => 'bargain','params' => ['goods_id' => $goods_id,'user' => $user]];
+
         $result = $this->request($param);
         if(empty($result)) return false;
 
@@ -58,9 +59,24 @@ class factory_client extends tcp_client
         }
     }
 
-    public function create_chat($user)
+    public function create_chat($creator,$user)
+    {
+        $param = ["act" => 'factory','op' => 'create', "type" => 'chat','params' => ['creator' => $creator,'user' => $user] ];
+        $result = $this->request($param);
+        if(empty($result)) return false;
+
+        $code = intval($result['code']);
+        if($code != 200) {
+            return false;
+        }
+        else {
+            return $result['data'];
+        }
+    }
+
+    public function create_group($creator)
     {
-        $param = ["act" => 'factory','op' => 'create', "type" => 'chat','creator' => $user];
+        $param = ["act" => 'factory','op' => 'create', "type" => 'group','params' => ['creator' => $creator] ];
         $result = $this->request($param);
         if(empty($result)) return false;
 
@@ -75,7 +91,7 @@ class factory_client extends tcp_client
 
     public function invite($roomid,$user)
     {
-        $param = ["act" => 'factory','room' => $roomid,'op' => 'invite','user' => $user];
+        $param = ["act" => 'factory','op' => 'invite','room' => $roomid,'user' => $user];
         $result = $this->request($param);
         if(empty($result)) return false;
 

+ 22 - 0
helper/room/factory_handler.php

@@ -0,0 +1,22 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2017/12/23
+ * Time: 下午5:39
+ */
+
+
+function ev_accept($socket, $flag, $base)
+{
+    room\factory_server::instance()->ev_accept($socket,$flag,$base);
+}
+function ev_read($buffer, $id)
+{
+    room\factory_server::instance()->ev_read($buffer,$id);
+}
+
+function ev_error($buffer, $error, $id)
+{
+    room\factory_server::instance()->ev_error($buffer,$error,$id);
+}

+ 78 - 87
helper/room/factory_processor.php

@@ -13,142 +13,133 @@ use errcode;
 
 class factory_processor implements IProcessor
 {
-    private $mAccConnes;
-    private $mFcgiConnes;
     private $mFactory;
-    private $mRooms;
+    private $mRoomClients;
+    private $mLastBuilding;
 
     public function __construct()
     {
-        $this->mAccConnes = [];
-        $this->mFcgiConnes  = [];
         $this->mFactory = new factory();
-        $this->mRooms = [];
+        $this->mRoomClients = [];
+        $this->mLastBuilding = 0;
+        $this->init();
     }
 
-    public function handle_input($bufid,$body)
+    private function init()
+    {
+        global $config;
+        $room_addrs = $config['rooms_addr'];
+        foreach ($room_addrs as $addr) {
+            $room_client = new room_client($addr['host'],$addr['port']);
+            $this->mRoomClients[] = $room_client;
+        }
+    }
+
+    public function onRequest($bufid, $body)
     {
         $input = json_decode($body,true);
         if($input == false) {
-            return $this->error(['result' => false]);
+            return false;
         }
+
         $act = $input['act'];
         if(!empty($act) && $act == proto_type::act_factory) {
-            return $this->onFactory($input);
-        }
-        elseif(!empty($act) && $act == proto_type::act_access) {
-            return $this->onAccess($input);
+            $ret = $this->onFactory($input);
+            factory_server::instance()->write($bufid,$ret);
+            return true;
         }
         else {
-            return $this->onRoom($input);
+            return false;
         }
-
-        ob_clean();
     }
 
+    public function onClose($bufid)
+    {
+    }
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     private function onFactory($input)
     {
-        $err = errcode::ErrRoom;
         $op = $input['op'];
         if($op == 'create')
         {
-            $room = $this->mFactory->create($input);
-            if($room != false) {
-                $user = intval($input['creator']);
-                $this->mRooms[$room->room_id()] = $room;
-                $user_roomKey = $room->invite($user);
-                if($user_roomKey != false) {
-                    $ret = ['room' => $room->room_id(),'room_key' => $user_roomKey];
+            $ret = $this->mFactory->create($input);
+            if($ret != false)
+            {
+                $roomid  = $ret['room'];
+                $userid  = $ret['creator'];
+
+                if($roomid <= 0 || $userid <= 0) {
+                    return $this->error(errcode::ErrRoomCreate);
+                }
+
+                $ret = $this->invite($roomid,$userid);
+                if($ret != false) {
                     return $this->success($ret);
+                } else {
+                    return $this->error(errcode::ErrRoomInvite);
                 }
             }
-            $err = errcode::ErrRoomCreate;
+
+            return $this->error(errcode::ErrRoomCreate);
         }
         elseif($op == 'invite')
         {
             $roomid = intval($input['room']);
-            $room = $this->room($roomid);
-            if($room != false)
-            {
-                $userid = intval($input['user']);
-                if($userid > 0)
-                {
-                    $room_key = $room->invite($userid);
-                    if($room_key != false) {
-                        return $this->success(['room' => $roomid,'room_key' => $room_key]);
-                    }
-                }
-            }
-            $err = errcode::ErrRoomInvite;
-        }
-
-        return $this->error($err);
-    }
+            $userid = intval($input['user']);
 
-    private function onAccess($input)
-    {
-        $result['act'] = 'access';
+            if($roomid <= 0 || $userid <= 0) {
+                return $this->error(errcode::ErrRoomInvite);
+            }
 
-        $op = $input['op'];
-        if($op == 'list')
-        {
-            $result['op'] = 'list';
-            $result['rooms'] = $this->rooms();
+            $ret = $this->invite($roomid,$userid);
+            if($ret != false) {
+                return $this->success($ret);
+            } else {
+                return $this->error(errcode::ErrRoomInvite);
+            }
         }
         else {
-
+            return $this->error(errcode::ErrRoomFactoryOp);
         }
-
-        return $this->success($result);
     }
 
-    private function rooms()
+    private function invite($roomid,$user)
     {
-        $result = [];
-        foreach ($this->mRooms as $roomid => $room) {
-            $result[] = $roomid;
-        }
-        return $result;
-    }
-
-    private function onRoom($input)
-    {
-        $result['act'] = 'room';
-
-        $roomid = intval($input['room']);
-        $room = $this->room($roomid);
-        if($room != false)
+        foreach ($this->mRoomClients as  $client)
         {
-            $function = $input['op'] . 'Op';
-            $roomkey = $input['room_key'];
-
-            $result['room_key'] = $roomkey;
-            if (method_exists($room,$function))
+            if($client->contain_room($roomid))
             {
-                $msgs = $room->$function($input);
-                if($msgs === false) {
-                    $result['op']  = 'deluser';
-                    return $this->success($result);
-                }
-                else {
-                    $result['msgs'] = $msgs;
-                    $result['op']  = 'broadcast';
-                    return $this->success($result);
+                $ret = $client->invite($roomid,$user);
+                if($ret != false) {
+                    return $ret;
                 }
             }
         }
-        else {
 
+        $client = $this->room_client();
+        if($client != false)
+        {
+            $ret = $client->invite($roomid,$user);
+            if($ret != false) {
+                $client->add_room($roomid);
+            }
         }
+
+        return $ret;
     }
 
-    private function room($roomid)
+    private function room_client()
     {
-        if($roomid <= 0) return false;
-        if(array_key_exists($roomid,$this->mRooms)) {
-            return $this->mRooms[$roomid];
+        $count = count($this->mRoomClients);
+        if($count <= 0) return false;
+
+        $pos = $this->mLastBuilding;
+        if($pos < $count) {
+            $this->mLastBuilding++;
+            return $this->mRoomClients[$pos];
         } else {
-            return false;
+            $this->mLastBuilding = 0;
+            return $this->mRoomClients[0];
         }
     }
 

+ 18 - 0
helper/room/group_room.php

@@ -0,0 +1,18 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2017/12/23
+ * Time: 下午3:35
+ */
+
+namespace room;
+
+
+class group_room extends base_room
+{
+    public function __construct($cinfos, array $roomkeys = [])
+    {
+        parent::__construct($cinfos, $roomkeys);
+    }
+}

+ 42 - 3
helper/room/proto_type.php

@@ -13,11 +13,50 @@ class proto_type
 {
     const act_factory = 'factory';
 
-    const act_bargain = 'bargain';
+    const act_bargain  = 'bargain';
     const room_bargain = 1;
 
-    const act_chat    = 'chat';
-    const room_chat   = 2;
+    const act_group    = 'group';
+    const room_group   = 2;
+
+    const act_chatwo   = 'chatwo';
+    const room_chatwo  = 3;
 
     const act_access = 'access';
+}
+
+class base_info
+{
+    private $mParams;
+    public function __construct($cinfos)
+    {
+        $this->mParams = $cinfos;
+    }
+    public function room_id() {
+        return intval($this->mParams['room_id']);
+    }
+    public function type() {
+        return intval($this->mParams['type']);
+    }
+    public function name() {
+        return intval($this->mParams['room_name']);
+    }
+    public function max_user() {
+        return intval($this->mParams['max_user']);
+    }
+    public function room_time() {
+        return intval($this->mParams['add_time']);
+    }
+    public function creator() {
+        return intval($this->mParams['room_creator']);
+    }
+    public function owner() {
+        return intval($this->mParams['room_owner']);
+    }
+    public function owner_name() {
+        return $this->mParams['owner_name'];
+    }
+    public function user_count() {
+        return intval($this->mParams['users']);
+    }
 }

+ 38 - 27
helper/room/room_client.php

@@ -10,54 +10,61 @@
 namespace room;
 
 use search\tcp_client;
+use algorithm;
 
 class room_client extends tcp_client
 {
     protected static $stInstance;
-    public function __construct()
+    private $mHost;
+    private $mPort;
+    private $mRooms;
+
+    public function __construct($host,$port)
     {
+        $this->mHost = $host;
+        $this->mPort = $port;
+        $this->mRooms = [];
+
         parent::__construct();
         $this->mBodyType = tcp_client::JsonType;
+        $this->init();
     }
 
-    public static function instance()
-    {
-        if(self::$stInstance == null) {
-            self::$stInstance = new room_client();
-        }
-        return self::$stInstance;
-    }
     public function __destruct()
     {
         parent::__destruct();
     }
 
-    public function remote_addr()
+    public function init()
     {
-        global $config;
-
-        $host = $config['room']['host'];
-        $port = $config['room']['port'];
-        return "{$host}:{$port}";
+        $ret = $this->list_room();
+        if($ret != false)
+        {
+            $rooms = $ret['rooms'];
+            foreach ($rooms as $roomid) {
+                $this->add_room($roomid);
+            }
+        }
     }
 
-    public function create_bargain()
+    public function contain_room($roomid)
     {
-        $param = ["act" => 'factory','op' => 'create', "type" => 'bargain','params' => ''];
-        $result = $this->request($param);
-        if(empty($result)) return false;
+        $roomid = intval($roomid);
+        return algorithm::binary_search($this->mRooms,$roomid);
+    }
 
-        $code = intval($result['code']);
-        if($code != 200) {
-            return false;
-        }
-        else {
-            return true;
+    public function add_room($roomid)
+    {
+        $room = intval($roomid);
+        if(algorithm::binary_search($this->mRooms,$room) == false) {
+            $pos = algorithm::lower_bonud($this->mRooms,$room);
+            algorithm::array_insert($this->mRooms,$pos,$room);
         }
     }
-    public function create_chat($user)
+
+    private function list_room()
     {
-        $param = ["act" => 'factory','op' => 'create', "type" => 'chat','creator' => $user];
+        $param = ["act" => 'factory','op' => 'list_room'];
         $result = $this->request($param);
         if(empty($result)) return false;
 
@@ -70,9 +77,13 @@ class room_client extends tcp_client
         }
     }
 
+    public function remote_addr() {
+        return "{$this->mHost}:{$this->mPort}";
+    }
+
     public function invite($roomid,$user)
     {
-        $param = ["act" => 'factory','room' => $roomid,'op' => 'invite','user' => $user];
+        $param = ["act" => 'factory','op' => 'invite','room' => $roomid,'user' => $user];
         $result = $this->request($param);
         if(empty($result)) return false;
 

helper/room/event_handler.php → helper/room/room_handler.php


+ 134 - 48
helper/room/room_processor.php

@@ -10,64 +10,92 @@ namespace room;
 
 use search\IProcessor;
 use errcode;
+use algorithm;
 
 class room_processor implements IProcessor
 {
     private $mAccConnes;
-    private $mFcgiConnes;
     private $mFactory;
     private $mRooms;
 
     public function __construct()
     {
         $this->mAccConnes = [];
-        $this->mFcgiConnes  = [];
         $this->mFactory = new factory();
         $this->mRooms = [];
     }
 
-    public function handle_input($bufid,$body)
+    public function onRequest($bufid, $body)
     {
         $input = json_decode($body,true);
         if($input == false) {
-            return $this->error(['result' => false]);
+            room_server::instance()->close($bufid);
+            return false;
         }
+
         $act = $input['act'];
         if(!empty($act) && $act == proto_type::act_factory) {
-            return $this->onFactory($input);
+            $ret = $this->onFactory($bufid,$input);
+            room_server::instance()->write($bufid,$ret);
+            return true;
         }
         elseif(!empty($act) && $act == proto_type::act_access) {
-            return $this->onAccess($input);
+            $ret = $this->onAccess($bufid,$input);
+            return $ret;
         }
         else {
-            return $this->onRoom($input);
+            $ret = $this->onRoom($bufid,$input);
+            return $ret;
         }
+    }
 
-        ob_clean();
+    public function onClose($bufid)
+    {
+        $this->remove_acc($bufid);
     }
 
-    private function onFactory($input)
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    private function onFactory($bufid,$input)
     {
-        $err = errcode::ErrRoom;
         $op = $input['op'];
-        if($op == 'create')
+        if($op == 'build')
         {
-            $room = $this->mFactory->create($input);
-            if($room != false) {
-                $user = intval($input['creator']);
-                $this->mRooms[$room->room_id()] = $room;
-                $user_roomKey = $room->invite($user);
-                if($user_roomKey != false) {
-                    $ret = ['room' => $room->room_id(),'room_key' => $user_roomKey];
-                    return $this->success($ret);
-                }
+            $roomid = intval($input['room']);
+
+            if($roomid <= 0) return $this->error(errcode::ErrRoomParam);
+            if(array_key_exists($roomid,$this->mRooms)) {
+                return $this->success(['room' => $roomid]);
+            }
+
+            $room = $this->mFactory->build($roomid);
+            if($room == false) {
+                return $this->error(errcode::ErrRoomBuild);
+            }
+            else {
+                $this->mRooms[$roomid] = $room;
+                return $this->success(['room' => $room->room_id()]);
             }
-            $err = errcode::ErrRoomCreate;
+        }
+        elseif($op == 'list_room')
+        {
+            return $this->success(['rooms' => $this->mRooms]);
         }
         elseif($op == 'invite')
         {
             $roomid = intval($input['room']);
-            $room = $this->room($roomid);
+            if($roomid <= 0) return $this->error(errcode::ErrRoomParam);
+
+            if(!array_key_exists($roomid,$this->mRooms))
+            {
+                $room = $this->mFactory->build($roomid);
+                if($room != false) {
+                    $this->mRooms[$roomid] = $room;
+                }
+            }
+            else {
+                $room = $this->room($roomid);
+            }
+
             if($room != false)
             {
                 $userid = intval($input['user']);
@@ -79,27 +107,25 @@ class room_processor implements IProcessor
                     }
                 }
             }
-            $err = errcode::ErrRoomInvite;
+            return $this->error(errcode::ErrRoomInvite);
+        }
+        else
+        {
+            return $this->error(errcode::ErrRoomFactoryOp);
         }
-
-        return $this->error($err);
     }
 
-    private function onAccess($input)
+    private function onAccess($bufid,$input)
     {
-        $result['act'] = 'access';
-
         $op = $input['op'];
-        if($op == 'list')
-        {
-            $result['op'] = 'list';
-            $result['rooms'] = $this->rooms();
+        if($op == 'list') {
+            $this->add_acc($bufid);
+            $this->write_accmsg($bufid,"list",['rooms' => $this->rooms()]);
+            return true;
         }
         else {
-
+            return $this->error(errcode::ErrRoomAccessOp);
         }
-
-        return $this->success($result);
     }
 
     private function rooms()
@@ -111,34 +137,72 @@ class room_processor implements IProcessor
         return $result;
     }
 
-    private function onRoom($input)
+    private function onRoom($bufid,$input)
     {
-        $result['act'] = 'room';
-
         $roomid = intval($input['room']);
         $room = $this->room($roomid);
+
         if($room != false)
         {
             $function = $input['op'] . 'Op';
             $roomkey = $input['room_key'];
 
-            $result['room_key'] = $roomkey;
             if (method_exists($room,$function))
             {
-                $msgs = $room->$function($input);
-                if($msgs === false) {
-                    $result['op']  = 'deluser';
-                    return $this->success($result);
+                $success = $room->$function($input);
+                if($success) {
+                    $this->write_roomsg($bufid,$room);
                 }
                 else {
-                    $result['msgs'] = $msgs;
-                    $result['op']  = 'broadcast';
-                    return $this->success($result);
+                    $this->del_user($bufid,$room->room_id(), [$roomkey]);
                 }
+                return true;
             }
         }
-        else {
 
+        return false;
+    }
+
+    private function del_user($bufid,$room_id,$roomkeys)
+    {
+        $msg = [];
+        $msg['receivers'] = ['type' => 'roomkey', 'users' => $roomkeys];
+        $msg['room'] = $room_id;
+        $msg['act']  = 'room';
+        $msg['op']   = 'deluser';
+
+        $body = $this->success(['msg' => $msg]);
+        room_server::instance()->write($bufid,$body);
+    }
+
+    protected function write_accmsg($bufid,$op,$content)
+    {
+        $msg['act']  = "access";
+        $msg['op']   = $op;
+
+        $msg['body']['act']  = 'access';
+        $msg['body']['op']   = $op;
+        $msg['body']['content'] = $content;
+        $body = $this->success(['msg' => $msg]);
+
+        room_server::instance()->write($bufid,$body);
+    }
+
+    private function write_roomsg($bufid,$room)
+    {
+        $retmsgs = $room->return_msgs();
+        foreach ($retmsgs as $msg) {
+            $body = $this->success(['msg' => $msg]);
+            room_server::instance()->write($bufid,$body);
+        }
+
+        $broad_msgs = $room->broadcast_msgs();
+        foreach ($broad_msgs as $msg)
+        {
+            $body = $this->success(['msg' => $msg]);
+            foreach ($this->mAccConnes as $conn) {
+                room_server::instance()->write($conn,$body);
+            }
         }
     }
 
@@ -152,7 +216,29 @@ class room_processor implements IProcessor
         }
     }
 
-    private function success($datas) {
+    private function add_acc($bufid) {
+        $connid = intval($bufid);
+        if($connid <= 0) return false;
+
+        if(!algorithm::binary_search($this->mAccConnes,$connid)) {
+            $pos = algorithm::lower_bonud($this->mAccConnes,$connid);
+            algorithm::array_insert($this->mAccConnes,$pos,$connid);
+        }
+        return true;
+    }
+    private function remove_acc($bufid)
+    {
+        $connid = intval($bufid);
+        if($connid <= 0) return false;
+
+        if(algorithm::binary_search($this->mAccConnes,$connid)) {
+            $pos = algorithm::lower_bonud($this->mAccConnes,$connid);
+            algorithm::array_erase($this->mAccConnes,$pos);
+        }
+        return true;
+    }
+    private function success($datas)
+    {
         $code = errcode::Success;
         $data['code'] = $code;
         $data['message'] = errcode::msg($code);

+ 14 - 9
helper/search/processor.php

@@ -25,7 +25,7 @@ class processor implements IProcessor
 
     const ValidateArea   = 20;
 
-    public function handle_input($bufid,$body)
+    public function onRequest($bufid, $body)
     {
         if(StatesHelper::fetch_state('init')) {
             Log::record("searcher::instance reload data.",Log::DEBUG);
@@ -39,37 +39,42 @@ class processor implements IProcessor
         {
             $words = $body['keyword'];
             $result = searcher::instance()->get_word($words);
-            return serialize($result);
+            $data = serialize($result);
         }
         elseif($type == self::SearchReasult) {
             $params = $body['params'];
             $result = searcher::instance()->get_result($params);
-            return serialize($result);
+            $data = serialize($result);
         }
         elseif($type == self::MatchPrice) {
             $params = $body['params'];
             $result = searcher::instance()->match_price($params);
-            return serialize($result);
+            $data = serialize($result);
         }
         elseif($type == self::PromoteGoods) {
             $params = $body['params'];
             $result = searcher::instance()->promote_goods($params);
-            return serialize($result);
+            $data = serialize($result);
         }
         elseif ($type == self::ValidateArea) {
             $params = $body['params'];
             $area_id = $params['area_id'];
             $result = area_library::instance()->country($area_id);
             if($result == false) {
-                return serialize(array('result' => false));
+                $data = serialize(array('result' => false));
             } else {
                 $result['result'] = true;
-                return serialize($result);
+                $data = serialize($result);
             }
         }
         else {
-
+            ob_clean();
+            return false;
         }
-        ob_clean();
+        CenterHelper::instance()->write($bufid,$data);
+        return true;
+    }
+    public function onClose($bufid)
+    {
     }
 }

+ 53 - 11
helper/search/srv_base.php

@@ -13,7 +13,8 @@ use Log;
 
 interface IProcessor
 {
-    public function handle_input($bufid,$body);
+    public function onRequest($bufid, $body);
+    public function onClose($bufid);
 }
 
 abstract class srv_base
@@ -33,8 +34,8 @@ abstract class srv_base
 
     protected function __construct()
     {
-        $this->mStreams = array();
-        $this->mBuffers = array();
+        $this->mStreams  = [];
+        $this->mBuffers  = [];
         $this->mContents = [];
     }
 
@@ -116,7 +117,7 @@ abstract class srv_base
         $content = &$this->mContents[$bufid];
         while (true)
         {
-            $read = event_buffer_read($buffer, 256);
+            $read = event_buffer_read($buffer, 1024);
             if(empty($read)) {
                 break;
             } else {
@@ -136,12 +137,9 @@ abstract class srv_base
                 if($left >= self::body_header_len + $len)
                 {
                     $body = substr($content,$start + self::body_header_len,$len);
-                    if($this->mProcessor != null)
+                    if($this->mProcessor != null && !empty($body))
                     {
-                        $data = $this->mProcessor->handle_input($bufid,$body);
-                        $header = sprintf("%010d",strlen($data));
-                        $data = $header . $data;
-                        $ret = event_buffer_write($buffer,$data,strlen($data));
+                        $ret = $this->mProcessor->onRequest($bufid,$body);
                         if($ret == false) break;
                     }
 
@@ -177,7 +175,51 @@ abstract class srv_base
             unset($this->mStreams[$bufid]);
         }
 
-        unset($this->mBuffers[$bufid]);
-        unset($this->mContents[$bufid]);
+        if(array_key_exists($bufid,$this->mBuffers)) {
+            unset($this->mBuffers[$bufid]);
+        }
+        if(array_key_exists($bufid,$this->mContents)) {
+            unset($this->mContents[$bufid]);
+        }
+
+        if($this->mProcessor != null) {
+            $this->mProcessor->onClose($bufid);
+        }
+    }
+
+    public function write($bufid,$data)
+    {
+        if(array_key_exists($bufid,$this->mBuffers)) {
+            $buffer = $this->mBuffers[$bufid];
+            $header = sprintf("%010d",strlen($data));
+            $data = $header . $data;
+            return event_buffer_write($buffer,$data,strlen($data));
+        } else {
+            return false;
+        }
+    }
+    public function close($bufid)
+    {
+        if(!array_key_exists($bufid,$this->mBuffers)) return false;
+
+        $buffer = $this->mBuffers[$bufid];
+        event_buffer_disable($buffer, EV_READ | EV_WRITE);
+        event_buffer_free($buffer);
+
+        if(array_key_exists($bufid,$this->mStreams)) {
+            stream_socket_shutdown($this->mStreams[$bufid],STREAM_SHUT_RDWR);
+            fclose($this->mStreams[$bufid]);
+            unset($this->mStreams[$bufid]);
+        }
+
+        if(array_key_exists($bufid,$this->mBuffers)) {
+            unset($this->mBuffers[$bufid]);
+        }
+        if(array_key_exists($bufid,$this->mContents)) {
+            unset($this->mContents[$bufid]);
+        }
+        if($this->mProcessor != null) {
+            $this->mProcessor->onClose($bufid);
+        }
     }
 }

+ 0 - 1
helper/search/tcp_client.php

@@ -154,7 +154,6 @@ abstract class tcp_client
         else {
             $param = json_encode($param);
         }
-
         $len = sprintf("%010d",strlen($param));
 
         $data = $len . $param;

+ 2 - 2
mobile/control/room.php

@@ -7,7 +7,7 @@
  */
 
 require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
-require_once(BASE_ROOT_PATH . '/helper/room/client.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory_client.php');
 
 class roomControl extends mbMemberControl
 {
@@ -23,7 +23,7 @@ class roomControl extends mbMemberControl
     public function indexOp()
     {
         $user = session_helper::memberid();
-        $ret = room\room_client::instance()->invite($this->mRoomID,$user);
+        $ret = room\factory_client::instance()->invite($this->mRoomID,$user);
         if($ret != false) {
             $ret['addr'] = $this->mAddr;
             return self::outsuccess($ret,"room/invite",'wap');

+ 14 - 1
mobile/util/errcode.php

@@ -92,6 +92,11 @@ class errcode extends SplEnum
     const ErrRoomCreate = 18001;
     const ErrRoomInvite = 18002;
     const ErrRoomJoin   = 18003;
+    const ErrRoomBuild  = 18004;
+    const ErrRoomParam  = 18005;
+    const ErrRoomFactoryOp  = 18006;
+    const ErrRoomAccessOp  = 18007;
+
 
     static function msg($code)
     {
@@ -183,9 +188,17 @@ class errcode extends SplEnum
             case errcode::ErrRoomCreate:
                     return '房间创建出错.';
             case errcode::ErrRoomInvite:
-                return '房间创建出错.';
+                return '房间邀请出错.';
             case errcode::ErrRoomJoin:
                 return '加入房间出错.';
+            case errcode::ErrRoomBuild:
+                return '房间重建出错.';
+            case errcode::ErrRoomParam:
+                return '房间重建参数出错,不存在此房间号.';
+            case errcode::ErrRoomFactoryOp:
+                return '房间不支持此操作.';
+            case errcode::ErrRoomAccessOp:
+                return '房间服务器不支持此access操作.';
             default :
                 return '系统错误.';
         }

+ 11 - 7
room_factory.php

@@ -10,19 +10,23 @@ define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
 
 require_once(BASE_ROOT_PATH . '/fooder.php');
 require_once(BASE_ROOT_PATH . '/helper/search/srv_base.php');
-require_once(BASE_ROOT_PATH . '/helper/room/server.php');
-require_once(BASE_ROOT_PATH . '/helper/room/processor.php');
-require_once(BASE_ROOT_PATH . '/helper/room/event_handler.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory_server.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory_processor.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory_handler.php');
 require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
+require_once(BASE_ROOT_PATH . '/helper/room/base_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/chatwo_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/group_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/bargain_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/factory.php');
-require_once(BASE_ROOT_PATH . '/helper/room/croom.php');
-require_once(BASE_ROOT_PATH . '/helper/room/bargain.php');
-require_once(BASE_ROOT_PATH . '/helper/room/chat.php');
+require_once(BASE_ROOT_PATH . '/helper/room/room_client.php');
 
 function search_work($sockfd)
 {
     Base::run_util();
-    room\factory_server::instance()->init(new room\factory_processor());
+
+    $processor = new room\factory_processor();
+    room\factory_server::instance()->init($processor);
     room\factory_server::instance()->run_loop($sockfd);
 }
 

+ 8 - 6
room_srv.php

@@ -10,14 +10,16 @@ define('BASE_ROOT_PATH',str_replace('\\','/',dirname(__FILE__)));
 
 require_once(BASE_ROOT_PATH . '/fooder.php');
 require_once(BASE_ROOT_PATH . '/helper/search/srv_base.php');
-require_once(BASE_ROOT_PATH . '/helper/room/server.php');
-require_once(BASE_ROOT_PATH . '/helper/room/processor.php');
-require_once(BASE_ROOT_PATH . '/helper/room/event_handler.php');
+require_once(BASE_ROOT_PATH . '/helper/room/room_server.php');
+require_once(BASE_ROOT_PATH . '/helper/room/room_processor.php');
+require_once(BASE_ROOT_PATH . '/helper/room/room_handler.php');
 require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
+require_once(BASE_ROOT_PATH . '/helper/room/base_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/chatwo_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/group_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/bargain_room.php');
 require_once(BASE_ROOT_PATH . '/helper/room/factory.php');
-require_once(BASE_ROOT_PATH . '/helper/room/croom.php');
-require_once(BASE_ROOT_PATH . '/helper/room/bargain.php');
-require_once(BASE_ROOT_PATH . '/helper/room/chat.php');
+require_once(BASE_ROOT_PATH . '/helper/room/room_client.php');
 
 function search_work($sockfd)
 {

+ 0 - 33
test/TestRoom.php

@@ -1,33 +0,0 @@
-<?php
-/**
- * Created by PhpStorm.
- * User: stanley-king
- * Date: 2017/12/14
- * Time: 下午4:59
- */
-
-define('BASE_ROOT_PATH',str_replace('/test','',dirname(__FILE__)));
-require_once(BASE_ROOT_PATH . '/fooder.php');
-require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
-require_once(BASE_ROOT_PATH . '/helper/room/client.php');
-
-
-class TestRoom extends PHPUnit_Framework_TestCase
-{
-    public static function setUpBeforeClass()
-    {
-        Base::run_util();
-    }
-    public function testCreateBargain()
-    {
-        room\room_client::instance()->create_bargain();
-    }
-    public function testCreateChat()
-    {
-        $user = 36490;
-        $ret = room\room_client::instance()->create_chat($user);
-
-        $room_id = $ret['room'];
-        $retx = room\room_client::instance()->invite($room_id,36429);
-    }
-}

+ 27 - 0
test/TestRoomAccess.php

@@ -0,0 +1,27 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2017/12/23
+ * Time: 下午2:19
+ */
+define('BASE_ROOT_PATH',str_replace('/test','',dirname(__FILE__)));
+require_once(BASE_ROOT_PATH . '/fooder.php');
+require_once(BASE_ROOT_PATH . '/helper/search/srv_base.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory_server.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory_processor.php');
+require_once(BASE_ROOT_PATH . '/helper/room/event_handler.php');
+require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory.php');
+require_once(BASE_ROOT_PATH . '/helper/room/croom.php');
+require_once(BASE_ROOT_PATH . '/helper/room/bargain.php');
+require_once(BASE_ROOT_PATH . '/helper/room/chat.php');
+require_once(BASE_ROOT_PATH . '/helper/room/room_client.php');
+
+class TestRoomAccess extends PHPUnit_Framework_TestCase
+{
+    public static function setUpBeforeClass()
+    {
+        Base::run_util();
+    }
+}

+ 61 - 0
test/TestRoomFactory.php

@@ -0,0 +1,61 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2017/12/14
+ * Time: 下午4:59
+ */
+
+define('BASE_ROOT_PATH',str_replace('/test','',dirname(__FILE__)));
+require_once(BASE_ROOT_PATH . '/fooder.php');
+require_once(BASE_ROOT_PATH . '/helper/search/srv_base.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory_server.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory_processor.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory_handler.php');
+require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
+require_once(BASE_ROOT_PATH . '/helper/room/base_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/chatwo_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/group_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/bargain_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory.php');
+require_once(BASE_ROOT_PATH . '/helper/room/room_client.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory_client.php');
+
+
+class TestRoomFactory extends PHPUnit_Framework_TestCase
+{
+    public static function setUpBeforeClass()
+    {
+        Base::run_util();
+    }
+    public function testProcessorCreateBargain()
+    {
+    }
+    public function testProcessorCreateChatwo()
+    {
+    }
+
+    public function testProcessorCreateGroup()
+    {
+        $processor = new room\factory_processor();
+        $creator = 36429;
+        $ret = $processor->onRequest(0,json_encode(["act" => 'factory','op' => 'create', "type" => 'group','creator' => $creator]));
+    }
+    public function testProcessorInvite()
+    {
+        $processor = new room\factory_processor();
+        $roomid=30;
+        $user = 36429;
+        $ret = $processor->onRequest(0,json_encode(["act" => 'factory','room' => $roomid,'op' => 'invite','user' => $user]));
+        $user = 36430;
+        $ret = $processor->onRequest(0,json_encode(["act" => 'factory','room' => $roomid,'op' => 'invite','user' => $user]));
+    }
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public function testSocketInvite()
+    {
+        $user = 36429;
+        $ret = room\factory_client::instance()->invite(30,$user);
+    }
+
+}

+ 64 - 0
test/TestRoomSrv.php

@@ -0,0 +1,64 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: stanley-king
+ * Date: 2017/12/14
+ * Time: 下午4:59
+ */
+
+define('BASE_ROOT_PATH',str_replace('/test','',dirname(__FILE__)));
+require_once(BASE_ROOT_PATH . '/fooder.php');
+require_once(BASE_ROOT_PATH . '/helper/search/srv_base.php');
+require_once(BASE_ROOT_PATH . '/helper/room/room_server.php');
+require_once(BASE_ROOT_PATH . '/helper/room/room_processor.php');
+require_once(BASE_ROOT_PATH . '/helper/room/room_handler.php');
+require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
+require_once(BASE_ROOT_PATH . '/helper/room/base_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/chatwo_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/group_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/bargain_room.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory.php');
+require_once(BASE_ROOT_PATH . '/helper/room/room_client.php');
+
+
+class TestRoomSrv extends PHPUnit_Framework_TestCase
+{
+    public static function setUpBeforeClass()
+    {
+        Base::run_util();
+    }
+
+    public function testBuildRoom()
+    {
+        $roomid=30;
+        $processor = new room\room_processor();
+        $ret = $processor->onRequest(0,json_encode(["act" => 'factory','room' => $roomid,'op' => 'build']));
+    }
+
+    public function testInviteRoom()
+    {
+        $roomid=30;
+        $user = 36429;
+        $processor = new room\room_processor();
+        $ret = $processor->onRequest(0,json_encode(["act" => 'factory','room' => $roomid,'op' => 'invite','user' => $user]));
+    }
+
+    public function testJoin()
+    {
+        $roomid=30;
+        $user = 36429;
+        $processor = new room\room_processor();
+        $ret = $processor->onRequest(0,json_encode(["act" => 'factory','room' => $roomid,'op' => 'invite','user' => $user]));
+        $ret = $processor->onRequest(0,json_encode(['op' => 'join','room' => $roomid,"room_key" => "d9d7668daad276fa4f02d5f029da0613"]));
+        $ret = $processor->onRequest(0,json_encode(['op' => 'join','room' => $roomid,"room_key" => "d9d7668daad276fa4f02d5f029da0614"]));
+    }
+
+    public function testListRoom()
+    {
+        $roomid=30;
+        $processor = new room\room_processor();
+        $ret = $processor->onRequest(0,json_encode(["act" => 'factory','room' => $roomid,'op' => 'build']));
+        $ret = $processor->onRequest(0,json_encode(["act" => 'access','op' => 'list']));
+    }
+
+}