GIF89a;
Direktori : /home/serb/public_html/chat/temp/patServer/ |
Current File : /home/serb/public_html/chat/temp/patServer/socketServer.php |
<?PHP class socketServer extends patXMLServer_Dom { /** * end character for socket_read * @var integer $readEndCharacter */ var $readEndCharacter = "\0"; /** * time of purgening * @var integer $time */ var $timer = 0; /** * request by flash received * * @access private * @param integer $clientId * @param string $requestType * @param array $requestParams */function debug($inHead, $inMessage) { return; toLog($inHead, $inMessage); } function onReceiveRequest( $clientId, $requestType, $requestParams, $xml ) { echo "\nreceiving...\n"; print_r($requestParams); $GLOBALS['clientId'] = $clientId; switch( $requestType ) { case "request": $conn =& ChatServer::getConnection( $requestParams, $clientId ); $conn->process( $requestParams ); break; case "fileshare": $this->sendFileShare( $requestParams, $xml); case "load_photo": $this->sendFileShare( $requestParams, $xml); case "policy-file-request": //CNW - IE7 support $policy_file = '<?xml version="1.0" encoding="UTF-8"?>'. '<cross-domain-policy>'. '<allow-access-from domain="*" to-ports="*" secure="false" />'. '</cross-domain-policy>'; $this->sendXMLResponse( $clientId, $policy_file ); //CNW end case "fault": // error management break; } //do purge $this->purge(); } function purge() { if((time() - $this->timer) > $GLOBALS['fc_config']['msgRequestInterval']) { $this->timer = time() + 3600; ChatServer::purge(); $this->timer = time(); } } function onStart() { $this->timer = time(); $stmt = new Statement("DELETE FROM {$GLOBALS['fc_config']['db']['pref']}connections"); $stmt->process(); } function onConnect( $clientId ) { $data = array('clientId' => $clientId, 'ip' => $this->clientInfo[$clientId]['host']); $this->saveClientConnection( $clientId, $data ); } function onClose( $clientId ) { //echo "\nonClose...\n"; //print_r($this->clientInfo); //logout $connection = $this->clientInfo[$clientId]['connection']; if( $connection['id'] != null ) { $connid = $connection['id']; $userid = $connection['userid']; $roomid = $connection['roomid']; $GLOBALS['clientId'] = $clientId; $conn =& ChatServer::getConnection( $this->clientInfo[$clientId]['connection'], $clientId ); $conn->doLogout(); $stmt = new Statement("DELETE FROM {$GLOBALS['fc_config']['db']['pref']}connections WHERE id = ?"); $stmt->process($connid); //delete links unset( $this->clientInfo['connid'][$connid] ); unset( $this->clientInfo['userid'][$userid] ); unset( $this->clientInfo['roomid'][$roomid][$clientId] ); } } function sendFileShare( $params, $xml ) { $id = -1; if( isset($params['a']) ) $id = array($this->clientInfo['userid'][$params['a']]); else if ( isset($params['r']) ) $id = $this->clientInfo['roomid'][$params['r']]; $this->send4ID($id, null, $xml); } function sendMessage( $message ) { if(!$message->created) $message->created = date("YmdHis"); $message->id = 1; //on insert message get id !!!??? $id = -1; $toconn = $message->toconnid != null; $touser = $message->touserid != null; if( $toconn || $touser ) { $id = array(); if( $toconn ) array_push($id, $this->clientInfo['connid'][$message->toconnid]); if( $touser ) array_push($id, $this->clientInfo['userid'][$message->touserid]); $id = array_unique( $id ); } else if($message->toroomid != null) $id = $this->clientInfo['roomid'][$message->toroomid]; //echo "\nid ".$id." msg ".$message->command." to uid ".$message->touserid." to cid ".$message->toconnid." to rid ".$message->toroomid."\n"; $this->send4ID($id, $message, null); } function send4ID( $IDs, $message, $xml) { //for all $clients = $this->clientInfo['connid']; //for some if(is_array($IDs)) $clients = $IDs; foreach($clients as $v) { $data = ($xml == null)? $message->toXML($this->clientInfo[$v]['connection']['tzoffset']) : $xml; $sxml = "<response id=\"".$this->clientInfo[$v]['connection']['id']."\">".$data."</response>"; $this->sendXMLResponse($v, $sxml); //echo "XML >> $sxml\n"; } } function saveClientConnection( $clientId, $data ) { if( !isset($this->clientInfo[$clientId]['connection']) ) { $this->clientInfo[$clientId]['connection'] = array( 'clientId' => $data['clientId'], 'id' => $data['id'], 'userid' => $data['userid'], 'roomid' => $data['roomid'], 'color' => $data['color'], 'state' => $data['state'], 'start' => $data['start'], 'lang' => $data['lang'], 'ip' => $data['ip'], 'tzoffset' => $data['tzoffset'], 'room_is_permanent' => $data['room_is_permanent'] ); } else { $this->clientInfo[$clientId]['connection'] = $data; } //create links for faster searching if($data['id'] != null) $this->clientInfo['connid'][$data['id']] = $data['clientId']; if($data['userid'] != null) $this->clientInfo['userid'][$data['userid']] = $data['clientId']; if($data['roomid'] != null) { if(!is_array($this->clientInfo['roomid'][$data['roomid']])) $this->clientInfo['roomid'][$data['roomid']] = array(); foreach ($this->clientInfo['roomid'] as $id=>$room){ if (in_array($data['clientId'], $room)) { unset($this->clientInfo['roomid'][$id][$data['clientId']]); } } $this->clientInfo['roomid'][$data['roomid']][$data['clientId']] = $data['clientId']; } //print_r($this->clientInfo); } } ?>