| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | <?php/** * This file is part of workerman. * * Licensed under The MIT License * For full copyright and license information, please see the MIT-LICENSE.txt * Redistributions of files must retain the above copyright notice. * * @author walkor<walkor@workerman.net> * @copyright walkor<walkor@workerman.net> * @link http://www.workerman.net/ * @license http://www.opensource.org/licenses/mit-license.php MIT License *//** * 用于检测业务代码死循环或者长时间阻塞等问题 * 如果发现业务卡死,可以将下面declare打开(去掉//注释),并执行php start.php reload * 然后观察一段时间workerman.log看是否有process_timeout异常 *///declare(ticks=1);/** * 聊天主逻辑 * 主要是处理 onMessage onClose  */use \GatewayWorker\Lib\Gateway;//use \GatewayWorker\Lib\DbConnection;//use think\Db;use think\App;class Events{    public static function onWorkerStart(){        App::initCommon();        //$info = Db::name('gateway_test')->insertGetId(['msg'=>'onWorkerStart','datetime'=>date('Y-m-d H:i:s')]);    }    /**     * 有消息时     * @param int $client_id     * @param mixed $message     */    public static function onMessage($client_id, $message)    {         //echo $message.PHP_EOL;         //file_put_contents('1.json',$message.PHP_EOL,FILE_APPEND);         //$info = Db::name('gateway_test')->insertGetId(['msg'=>'[msg]'.$message,'datetime'=>date('Y-m-d H:i:s')]);         //Gateway::sendToAll($client_id.'说:'.$message);         return;        /* $message = json_decode($message,true);         if(is_array($message)){             self::changestatus($message);         }else{             //echo 'default';         }*/         //return ;         /*if(is_array($message) && isset($message['action']) && $message['action'] == 'changestatus'){             self::changestatus($message);         }else{             echo 'default';         }         return ;*/    }    /**     * 当客户端连接时触发     * 如果业务不需此回调可以删除onConnect     * @param int $client_id 连接id     */    /*public static function onConnect($client_id)    {        // 向当前client_id发送数据        Gateway::sendToClient($client_id, "Hello $client_id");        // 向所有人发送        Gateway::sendToAll("$client_id login");    }*/	/*{        'action':'changestatus',         "uid": "1",         "type": "video",'audio'         "value": "0",或‘1’         "nowtime": "1234567890 ",         "token": "edbf8a75-8e36-41f5-989f-7b3d067ccc83"    }*/    //修改用的通话状态    private static function changestatus($message){        //dump($message);        if(isset($message['uid']) && isset($message['value'])){            $redis = newredis();            $redis->set('gg_matching_uid_'.$message['uid'], $message['value'], null);        }        return;    }    //聊天扣钱    private static function userchat(){        $price = config('site.typing_min_price');        //扣费        Db::startTrans();        if(isset($message['uid'])){            $rs = model('wallet')->lockChangeAccountRemain($message['uid'],'gold',-$price,13,'','',0);            if($rs['status'] === false){                Db::rollback();            }        }        Db::commit();    }       /**     * 当客户端断开连接时     * @param integer $client_id 客户端id     */    public static function onClose($client_id)    {        // debug        /* echo "client:{$_SERVER['REMOTE_ADDR']}:{$_SERVER['REMOTE_PORT']} gateway:{$_SERVER['GATEWAY_ADDR']}:{$_SERVER['GATEWAY_PORT']}  client_id:$client_id onClose:''\n";                // 从房间的客户端列表中删除         if(isset($_SESSION['room_id']))         {             $room_id = $_SESSION['room_id'];             $new_message = array('type'=>'logout', 'from_client_id'=>$client_id, 'from_client_name'=>$_SESSION['client_name'], 'time'=>date('Y-m-d H:i:s'));             Gateway::sendToGroup($room_id, json_encode($new_message));         }*/    }    public static function onWorkerStop(){        //$info = Db::name('gateway_test')->insertGetId(['msg'=>'onWorkerStop','datetime'=>date('Y-m-d H:i:s')]);    }  }
 |