我正在尝试使用XMPPFramework制作聊天应用程序。我完成了连接设置。我也可以聊聊单用户。我还可以创建一个用于在多个用户之间进行聊天的组。我的问题是在创建组后,当我想将用户添加到组中时不起作用。这里是我用过的代码。而且,我没有得到任何调用这种方法didFetchModeratorsList:
Step-1
#pragma mark --- Create Room
- (void) createChatRoom:(NSString *)groupName{
if (!groupName)
{
return;
}
XMPPRoomMemoryStorage *roomStorage = [[XMPPRoomMemoryStorage alloc] init];
NSString* roomID = [NSString stringWithFormat:@"%@@conference.%@", groupName, CURRENT_HOST_NAME];
XMPPJID * roomJID = [XMPPJID jidWithString:roomID];
XMPPRoom *xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:roomStorage
jid:roomJID
dispatchQueue:dispatch_get_main_queue()];
[xmppRoom activate:xmppStream];
[xmppRoom addDelegate:self
delegateQueue:dispatch_get_main_queue()];
/*
NSXMLElement *history = [NSXMLElement elementWithName:@"history"];
[history addAttributeWithName:@" maxchars" stringValue:@"0"];
*/
[xmppRoom joinRoomUsingNickname:xmppStream.myJID.user
history:nil
password:nil];
[self performSelector:@selector(ConfigureNewRoom:) withObject:nil afterDelay:3];
}
Step-2
#pragma mark --- addMemberInChatRoom
- (void) addMemberInChatRoom:(NSString*)roomName :(NSArray*)memberId{
NSLog(@"roomName: %@", roomName);
NSLog(@"memberId: %@", memberId);
XMPPRoomMemoryStorage *roomStorage = [[XMPPRoomMemoryStorage alloc] init];
NSString* roomID = [NSString stringWithFormat:@"%@@conference.%@", roomName, CURRENT_HOST_NAME];
XMPPJID * roomJID = [XMPPJID jidWithString:roomID];
XMPPRoom *xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:roomStorage
jid:roomJID
dispatchQueue:dispatch_get_main_queue()];
[xmppRoom activate:xmppStream];
[xmppRoom addDelegate:self delegateQueue:dispatch_get_main_queue()];
[xmppRoom joinRoomUsingNickname:xmppStream.myJID.user
history:nil
password:nil];
[self performSelector:@selector(ConfigureNewRoom:) withObject:nil afterDelay:1];
[xmppRoom inviteUsers:memberId withMessage:@"join this room"];
}
Step-3
#pragma mark --- This fuction is used configure new
- (void)ConfigureNewRoom:(XMPPRoom *)xmppRoom
{
[xmppRoom configureRoomUsingOptions:nil];
[xmppRoom fetchConfigurationForm];
//[xmppRoom fetchBanList];
[xmppRoom fetchMembersList];
//[xmppRoom fetchModeratorsList];
}
Step-4
- (void)xmppRoom:(XMPPRoom *)sender didFetchModeratorsList:(NSArray *)items
{
NSLog(@"%@: %@ --- %@", THIS_FILE, THIS_METHOD, sender.roomJID.bare);
}
我认为你正在使用两个不同的实例。使用下面的东西。这对我有用。
private var toBeCreatedRoom: XMPPRoom!
func createRoom(_ roomName: String) {
let roomStorage = XMPPRoomMemoryStorage()
let name = roomName + "@conference." + "hostName"
let roomJID = XMPPJID(string: name)
toBeCreatedRoom = XMPPRoom(roomStorage: roomStorage!, jid: roomJID!, dispatchQueue: DispatchQueue.main)
toBeCreatedRoom.addDelegate(self, delegateQueue: DispatchQueue.main)
toBeCreatedRoom.activate(self.xmppStream)
toBeCreatedRoom.join(usingNickname: "self.userName", history: nil, password: nil)
}
func inviteUsersToRoom(roomMembers: [XMPPJID]) {
if let room = toBeCreatedRoom {
for member in roomMembers {
let element = XMPPRoom.item(withAffiliation: "member", jid: member)
room.editPrivileges([element])
room.inviteUser(member, withMessage: "Hey, Welcome to the group!")
}
}
}