Files
xinhu/webmain/task/api/tonghuaAction.php
2022-08-14 16:47:40 +08:00

167 lines
4.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
class tonghuaClassAction extends apiAction
{
/**
* 通话初始化
*/
public function thinitAction()
{
if(!getconfig('video_bool'))return returnerror('系统未开启音视频');
$id = (int)$this->get('id');
$type = (int)$this->get('type');
if($id==$this->adminid)return returnerror('不能和自己通话');
$nowtime = strtotime($this->now);
//判断用户有没有在线
$gbarr = m('reim')->pushserver('getonline', array(
'onlineid' => $id
));
if(!$gbarr)return returnerror('没有服务端');
if(!$gbarr['success'])return $gbarr;
$ondats = json_decode(arrvalue($gbarr,'data'), true);
$online = false;
if($ondats){
if($ondats['pc']==$id)$online = true;
if($ondats['app']==$id)$online = true;
}
if(!$online){
$to = m('login')->rows('`uid`='.$id.' and `online`=1 and `ispush`=1');
if($to==0)return returnerror('对方不在线,无法通话');
}
$barr = c('xinhuapi')->getdata('tonghua','thinit', array('faid'=>$this->adminid,'nowtime'=>$nowtime,'toid'=>$id,'type'=>$type));
if(!$barr['success'])return $barr;
$data = $barr['data'];
$key = $data['channel'];
c('cache')->set($key, $data, 60);
//保存自己通话里面
m('im_tonghua')->insert(array(
'uid' => $this->adminid,
'faid' => $this->adminid,
'channel' =>$data['channel'],
'type' =>$data['type'],
'joinids' =>$id,
'adddt' =>$this->now,
));
//异步发送
c('rockqueue')->push('tonghua,call', array('key' => $key,'cishu'=>1));
return $barr;
}
/**
* 取消呼叫
*/
public function cancelAction()
{
$channel = $this->get('channel');
$state = (int)$this->get('state','3');
m('im_tonghua')->update('`state`='.$state.'',"`channel`='$channel'");
$barr = c('rockqueue')->push('tonghua,cancel', array('key' => $channel));
if(!$barr['success'])return $barr;
return returnsuccess();
}
/**
* 接电话了(1同意2拒绝,3取消4接受者已打开页面5呼叫超过30秒无人接听)
*/
public function jieAction()
{
$channel = $this->get('channel');
$state = (int)$this->get('state','2');
$dbs = m('im_tonghua');
$onrs = $dbs->getone("`channel`='$channel'");
$satype = '';
if(!$onrs)$satype = '通话不存在';
if($onrs && ($onrs['state']=='3' || $onrs['state']=='5'))$satype = '对方已取消';
if(!$satype){
$nowtime = strtotime($this->now);
$upstsr = '`state`='.$state.'';
if($state==1)$upstsr.=",`jiedt`='$this->now'";
$dbs->update($upstsr,"`channel`='$channel'");
$barr = c('rockqueue')->push('tonghua,jie', array('key'=>$channel,'nowtime'=>$nowtime,'uid'=>$this->adminid,'state'=>$state));
if(!$barr['success'])return $barr;
}
return returnsuccess(array(
'satype' => $satype
));
}
/**
* 接通
*/
public function jietongAction()
{
$channel = $this->get('channel');
$barr = c('xinhuapi')->getdata('tonghua','jietong', array('uid'=>$this->adminid,'channel'=>$channel));
if($barr['success']){
$bars = $this->jieAction();
if(!$bars['success'])return $bars;
$datas= $bars['data'];
foreach($datas as $k=>$v)$barr['data'][$k] = $v;
}
return $barr;
}
/**
* 结束通话
*/
public function jiesuAction()
{
$nowtime = strtotime($this->now);
$channel = $this->get('channel');
$toid = (int)$this->get('toid');
c('rockqueue')->push('tonghua,jiesu', array('uid'=>$this->adminid,'toid'=>$toid,'nowtime'=>$nowtime,'channel'=>$channel));
m('im_tonghua')->update("`enddt`='$this->now',`jieid`='$this->adminid'","`channel`='$channel'");
return returnsuccess();
}
/**
* 接受者打开了界面
*/
public function receopenAction()
{
$channel = $this->get('channel');
$where = "`channel`='$channel'";
$dbs = m('im_tonghua');
$dbs->update('`state`=4', $where);
$thrs = $dbs->getone($where);
$sytime = time()-strtotime($thrs['adddt']);
return returnsuccess(array(
'sytime' => $sytime
));
}
/**
* 时时读取状态
*/
public function stateAction()
{
$channel = $this->get('channel');
$onrs = m('im_tonghua')->getone("`channel`='$channel'");
$tayar = array('','tongyi','jujue','cancel','wait','cancel');
return returnsuccess(array(
'state' => arrvalue($tayar, $onrs['state'])
));
}
/**
* 判断通话是不是结束
*/
public function statethAction()
{
$channel = $this->get('channel');
$onrs = m('im_tonghua')->getone("`channel`='$channel'");
$state = 'wu';
if($onrs && !isempt($onrs['enddt']))$state = 'jiesu';
return returnsuccess(array(
'state' => $state
));
}
}