给xmpphp添加了几个常用的方法
给xmpphp添加给了以下的常用方法:
registerNewUser //注册一个新用户
addRosterContact //发送添加好友的请求
accept friend request //接受好友请求
deleteRosterContact //删除某个好友
roomMessage //发送群聊消息
createChatRoom //创建群聊
kickUserOutToChatRoom //把某个人剔除群聊
/**
* Register a new user.
*
* @param $entity
* Entity we want information about
*/
public function registerNewUser($user_name, $password = NULL, $email, $name=NULL){ $id = 'reg_' . $this->getID();
$xml = "<iq type='set' id='$id'>
<query xmlns='jabber:iq:register'>
<username>" . $user_name . "</username>
<password>" . $password . "</password>
<email>" . $email . "</email>
<name>" . $name . "</name>
</query>
</iq>";
$this->send($xml); } /**
* Add contact to your roster
*/
public function addRosterContact($jid, $name, $nickName="",$groups=array("Friends")){
// return if there is no jid specified
if(!$jid) return;
// set name to the jid if none is specified
if (!$name) { $name = $jid; }
$id = $this->getID();
$xml = "<iq type='set' id='$id'>";
$xml .= "<query xmlns='jabber:iq:roster'>";
$xml .= "<item jid='$jid' name='$name'>";
foreach ($groups as $group) {
$xml .= "<group>$group</group>";
}
$xml .= "</item>";
$xml .= "</query>";
$xml .= "</iq>"; $xml= <<<EOF
<presence to='{$jid}' type='subscribe'>
<nick xmlns='http://jabber.org/protocol/nick'>{$nickName}</nick>
</presence>
EOF; $this->send($xml);
} /**
* accept friend request
* @param unknown_type $send_jid
* @param unknown_type $received_jid
*/
public function acceptRosterRequest( $send_jid, $receive_jid,$send_name="",$receive_name="" ){ $xml= <<<EOF
<presence from="{$send_jid}" to="{$receive_jid}" type="subscribed">
<nick xmlns='http://jabber.org/protocol/nick'>{$send_name}</nick>
</presence>
<presence from="{$receive_jid}" to="{$send_jid}" type="subscribed">
<nick xmlns='http://jabber.org/protocol/nick'>{$receive_name}</nick>
</presence>
EOF;
$this->send($xml); } /**
* Contact you wish to remove
* @param $jid
*
*/
public function deleteRosterContact($jid) {
$id = $this->getID();
$xml = "<iq type='set' id='$id'>";
$xml .= "<query xmlns='jabber:iq:roster'>";
$xml .= "<item jid='" . $jid . "' subscription='remove' />";
$xml .= "</query>";
$xml .= "</iq>";
$this->send($xml);
} /**
* send group message
* @param unknown_type $to
* @param unknown_type $body
* @param unknown_type $type
* @param unknown_type $subject
* @param unknown_type $payload
*/
public function roomMessage($jid,$room_jid, $body, $subject = null, $payload = null, $user_name=null) { if( $user_name ){
// $present_roomId=$room_jid."/".$user_name;
$present_roomId=$room_jid."/".$user_name."_"; //加“_”是因为防止同一个帐号在两个地方用同样的nickname登录房间,会有一个地方会退出登录的
}
else{
$present_roomId=$room_jid;
} $id=$this->getID(); $out= <<<EOF
<presence
from='{$jid}'
to='{$present_roomId}'>
<x xmlns='http://jabber.org/protocol/muc'/>
</presence> EOF; $jid = htmlspecialchars($jid);
$body = htmlspecialchars($body);
$subject = htmlspecialchars($subject); $out .= "<message from=\"{$jid}\" to=\"{$room_jid}\" type='groupchat'>";
if($subject) $out .= "<subject>$subject</subject>";
$out .= "<body>$body</body>";
if($payload) $out .= $payload;
$out .= "</message>"; $this->send($out); } /**
* create chat group
* @param unknown_type $jid, creater's jid
* @param unknown_type $room_jid chatroom's jid
*
* take example
* in a class, how to use this methodd
*
//modify room default setting
$room_setting=array('muc#roomconfig_roomname'=>$testName,'muc#roomconfig_roomdesc'=>$testDesc,'muc#roomconfig_changesubject'=>1); //create chatroom , save chatroom settting
$this->_conn->createChatRoom($jid,$test_id,$real_name,$room_setting,$this); //set chatroom setting to xmpp server, in this class, need a public $room_xml
$this->_conn->sendChatroom_setting($jid,$test_id,$real_name,$this->room_xml);
*
*/
public function createChatRoom($jid, $room_jid,$real_name,$room_setting=array(),$ref_obj){ $this->refObj=$ref_obj;
$this->room_setting=$room_setting;
$id=$this->getID(); $this->from=$jid;
$this->to=$room_jid; $xml= <<<EOF
<presence
from='{$jid}'
to='{$room_jid}/{$real_name}'>
<x xmlns='http://jabber.org/protocol/muc'/>
</presence>
<iq from='{$jid}'
id="{$id}"
to='{$room_jid}'
type='get'>
<query xmlns='http://jabber.org/protocol/muc#owner'/>
</iq>
EOF; $this->addIdHandler($id, 'setChatroom');
$this->send($xml);
} /**
* set chatroom setting
* @param unknown_type $xml
*/
public function setChatroom($xml){ $xml->attrs['type']="set";
$xml->attrs['from']=$this->from;
$xml->attrs['to']=$this->to;
$xml->subs[0]->subs[0]->attrs['type']='submit';
foreach( $xml->subs[0]->subs[0]->subs as &$node ){
if( isset($node->attrs['var']) && isset( $this->room_setting[$node->attrs['var']] ) ){
$node->subs[0]->data=$this->room_setting[$node->attrs['var']];
}
} $this->refObj->room_xml=$xml->toString();
} /**
* please call setChatroom() before call this method
*/
public function sendChatroomSetting($jid, $room_jid,$real_name,$room_xml){ $xml= <<<EOF
<presence
from='{$jid}'
to='{$room_jid}/{$real_name}'>
<x xmlns='http://jabber.org/protocol/muc'/>
</presence>
EOF; $xml.=$room_xml;
$this->send($xml); } /**
* kick user out to chat room
* @param unknown_type $jid, create's jid
* @param unknown_type $room_jid,chatroom's jid
* @param unknown_type $real_name,kickout user's jid
* @param unknown_type $room_jid,chatroom's jid
*/
public function kickUserOutToChatRoom($jid, $room_jid,$real_name,$kick_names=array()){ $xml= <<<EOF
<presence
from='{$jid}'
to='{$room_jid}/{$real_name}'>
<x xmlns='http://jabber.org/protocol/muc'/>
</presence>
EOF; foreach( $kick_names as $kick_name ){ $id=$this->getID(); $xml.= <<<EOF
<iq from='{$jid}'
id='{$id}'
to='{$room_jid}'
type='set'>
<query xmlns='http://jabber.org/protocol/muc#admin'>
<item nick='{$kick_name}' role='none'>
<reason>manger kick you out of room</reason>
</item>
</query>
</iq>
EOF; } $this->send($xml);
} /**
*
* @param XML Object $xml
*/
protected function delete_roster_contact_handler($xml) {
// do any handling you wish here
$this->event('contact_removed');
} public function getJid(){
return $this->jid;
}
代码已开源,地址:
https://github.com/newjueqi/xmpp
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2014.06.25更新
关于创建群组的例子,请看XMPPHP/test.php 文件中的 createEventChatRoom()
[文章作者]曾健生
[作者邮箱]h6k65@126.com
[作者QQ]190678908
[新浪微博] @newjueqi
[博客] http://blog.csdn.net/newjueqi
http://blog.sina.com.cn/h6k65
版权声明:本文为博主原创文章,未经博主允许不得转载。
给xmpphp添加了几个常用的方法的更多相关文章
- WebAPi添加常用扩展方法及思维发散
前言 在WebAPi中我们通常需要得到请求信息中的查询字符串或者请求头中数据再或者是Cookie中的数据,如果需要大量获取,此时我们应该想到封装一个扩展类来添加扩展方法,从而实现简便快捷的获取. We ...
- iOS常用公共方法
iOS常用公共方法 字数2917 阅读3070 评论45 喜欢236 1. 获取磁盘总空间大小 //磁盘总空间 + (CGFloat)diskOfAllSizeMBytes{ CGFloat si ...
- 常用js方法整理common.js
项目中常用js方法整理成了common.js var h = {}; h.get = function (url, data, ok, error) { $.ajax({ url: url, data ...
- Delphi中TStringList类常用属性方法详解
TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delim ...
- (转)Android之常用功能方法大集合
这些,都是Andorid中比较常用的方法和功能,在网上搜集整理一下记录之,以备不时之需.由于经过多次转载,源文作者不确凿,在此申明,敬请见谅.不得不赞,非常实用. 1.判断sd卡是否存在 boolea ...
- php中的常用魔术方法总结
以下是对php中的常用魔术方法进行了详细的总结介绍,需要的朋友可以过来参考下 常用的魔术方法有:__Tostring () __Call() __autoLoad() __ clone() __GET ...
- 项目中常用js方法整理common.js
抽空把项目中常用js方法整理成了common.js,都是网上搜集而来的,大家一起分享吧. var h = {}; h.get = function (url, data, ok, error) { $ ...
- js中关于string的一些常用的方法
最近总结了一些关于string中的常用方法, 其中大部分的方法来自于<JavaScript框架设计>这本书, 如果有更好的方法,或者有关于string的别的常用的方法,希望大家不吝赐教. ...
- python字符串常用的方法解析
这是本人在学习python过程中总结的一些关于字符串的常用的方法. 文中引用了python3.5版本内置的帮助文档,大致进行翻译,并添加了几个小实验. isalnum S.isalnum() -> ...
随机推荐
- linu下C语言之BMP图片操作编程(上)
BMP文件格式,也被称为位图图像文件或与设备无关的位图文件格式(DIB)或者只是一个位图,是 一个光栅图形 图像文件格式使用 来存储位图,数字,图片,独立的显示设备. 微软已经定义了一个特定的表示颜色 ...
- 关于linux内核驱动开发中Makefile编译的问题
obj-y:打个比方,我要编译的是hello.c这个文件,obj-y就会把hello.c或者hello.c编译生成的hello.s文件链接到内核中去. obj-m:打个比方,我要编译的是hello.c ...
- csdn我的blog成长轨迹(好吧我是闲的蛋疼)
2014-06-26 21:26 2014-06-28 15:17 2014-07-03 14:35 2014-08-31 0922 ...
- 属性动画基础之ValueAnimator
概述 属性动画是谷歌在android3.0(API level 11)时候给我们带来了属性动画,真正意义上带来了"动画",以前的帧动画也就4中效果的组合(旋转.淡入淡出.放大缩小. ...
- 操作json数据
删除: delete json[key] 把json字符串转成jsonObject : eval(+'('+json+')'+) 把jsonObject 转换成json字符串 :json.toJSON ...
- JQuery(二)---- JQ的事件与动画详解
JQuery的事件 /** * 1.事件绑定的快捷方式: */ $("button:eq(0)").dblclick(function(){ alert("hahaah& ...
- word break II(单词切分)
Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, add space ...
- subsets(子集)
Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The solut ...
- .ancestors *效果
<!DOCTYPE html> <html> <head> <style> .ancestors * { display: block; border ...
- 【抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重复的抽象
不完整的抽象 抽象未支持所有互补或相关的方法时,将导致这种坏味. 为什么要有完整的抽象? 一种重要的抽象实现手法是创建内聚而完整的抽象.抽象未支持相关的方法时,可能会影响抽象的内聚性和完整性.如果抽象 ...