我正在开发iOS聊天客户端。有没有人能帮我解决多用户聊天?
我已经实现了Robbiehanson的XMPPFramework。
有没有人可以告诉我如何使用这个框架来获取群组列表并在服务器上创建群组?
提前谢谢。
发布于 2016-11-12 08:19:21
以下是Swift的一个版本:
func joinRoom(with jidString: String, delegate: XMPPRoomDelegate) -> XMPPRoom {
let roomJID = XMPPJID(string: jidString)
let roomStorage = XMPPRoomCoreDataStorage.sharedInstance()
let room = XMPPRoom(roomStorage: roomStorage, jid: roomJID, dispatchQueue: DispatchQueue.main)!
room.activate(xmppStream)
room.addDelegate(delegate, delegateQueue: DispatchQueue.main)
// If the room is not existing, server will create one.
room.join(usingNickname: xmppStream.myJID.user, history: nil)
return room
}
// MUCRoomDelegate
public func xmppRoomDidCreate(_ sender: XMPPRoom!) {
print("xmppRoomDidCreate")
// I prefer configure right after created
sender.fetchConfigurationForm()
}
public func xmppRoomDidJoin(_ sender: XMPPRoom!) {
print("xmppRoomDidJoin")
}
public func xmppRoom(_ sender: XMPPRoom!, didFetchConfigurationForm configForm: DDXMLElement!) {
print("didFetchConfigurationForm")
let newForm = configForm.copy() as! DDXMLElement
for field in newForm.elements(forName: "field") {
if let _var = field.attributeStringValue(forName: "var") {
switch _var {
case "muc#roomconfig_persistentroom":
field.remove(forName: "value")
field.addChild(DDXMLElement(name: "value", numberValue: 1))
case "muc#roomconfig_membersonly":
field.remove(forName: "value")
field.addChild(DDXMLElement(name: "value", numberValue: 1))
// other configures
default:
break
}
}
}
sender.configureRoom(usingOptions: newForm)
}
public func xmppRoom(_ sender: XMPPRoom!, didConfigure iqResult: XMPPIQ!) {
print("didConfigure")
}
发布于 2016-11-09 15:03:23
+(void)getGroupRooms{
NSError *error = nil;
NSXMLElement *query = [[NSXMLElement alloc] initWithXMLString:@"<query xmlns='http://jabber.org/protocol/disco#items'/>" error:&error];
XMPPIQ *iq = [XMPPIQ iqWithType:@"get" to:[XMPPJID jidWithString:Jabber_groupChat_Domain_server] elementID:[[[PXMPPManager sharedInstance] xmppStream] generateUUID] child:query];
[iq addAttributeWithName:@"from" stringValue:[[[PXMPPManager sharedInstance] xmppStream] myJID].full];
[[[PXMPPManager sharedInstance] xmppStream] sendElement:iq];
//<iq type="get"
//to="conference.cnr-uat.panamaxil.com"
//id="DF27F28E-488D-4DAB-AA03-399A4CDE91B3"
//from="919414184320@cnr-uat.panamaxil.com/iphone">
//<query xmlns="http://jabber.org/protocol/disco#items"/>
//</iq>
}
#pragma - mark XMPPStreamDelegate Methods
- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq{
// NSLog(@"Did receive IQ");
if([iq isResultIQ])
{
if([iq elementForName:@"query" xmlns:@"http://jabber.org/protocol/disco#items"])
{
NSLog(@"Jabber Server's Capabilities: %@", [iq XMLString]);
NSXMLElement *queryElement = [iq elementForName:@"query" xmlns:@"http://jabber.org/protocol/disco#items"];
NSArray *items = [queryElement elementsForName:@"item"];
NSMutableArray *arrGroupName = [[NSMutableArray alloc] init];
for (NSXMLElement *i in items) {
NSString *roomName = [i attributeStringValueForName:@"name"];
NSString *jidString = [i attributeStringValueForName:@"jid"];
//XMPPJID *jid = [XMPPJID jidWithString:jidString];
NSDictionary *dict = @{
@"groupName" : roomName,
@"groupJID" : jidString,
};
[arrGroupName addObject:dict];
}
[ConversationsModel saveGroupName:arrGroupName];
}
}
return false;
}
https://stackoverflow.com/questions/19268629
复制相似问题