Dưới đây là làm thế nào tôi có vấn đề của riêng tôi giải quyết. Lưu ý rằng giải pháp này không liên quan đến XMPPRoom. Đầu tiên, tôi tạo ra một phương thức, tùy thuộc vào tình huống, hoặc tạo ra hoặc đi vào một căn phòng. (Theo tài liệu XMPP, yêu cầu tạo XML giống như tài liệu bạn gửi để vào phòng, nghĩa là nếu phòng chưa tồn tại khi bạn nhập, dịch vụ sẽ tạo nó cho bạn .)
Đây rồi. Đây là phương thức tạo/vào phòng. Những gì phương pháp này làm là gửi một sự hiện diện cho căn phòng mà bạn dự định tạo/nhập. Nếu bạn là người đầu tiên vào phòng và phòng chưa được tạo, bạn sẽ tự động trở thành chủ sở hữu và người kiểm duyệt của nó.
- (void)createOrEnterRoom:(NSString *)roomName
{
//here we enter a room, or if the room does not yet exist, this method creates it
//per XMPP documentation: "If the room does not yet exist, the service SHOULD create the room"
//this method accepts an argument which is what you would baptize the room you wish created
NSXMLElement *presence = [NSXMLElement elementWithName:@"presence"];
NSString *room = [roomName stringByAppendingString:@"@conference.jabber.com/iMac"];
[presence addAttributeWithName:@"to" stringValue:room];
NSXMLElement *x = [NSXMLElement elementWithName:@"x" xmlns:@"http://jabber.org/protocol/muc"];
NSXMLElement *history = [NSXMLElement elementWithName:@"history"];
[history addAttributeWithName:@"maxstanzas" stringValue:@"50"];
[x addChild:history];
[presence addChild:x];
[[self xmppStream] sendElement:presence];
}
Tiếp theo, trong appdelegate nơi phương pháp XMPPStream được khai báo chúng tôi lọc phản ứng XML chúng tôi nhận được trong phương pháp didReceivePresence bằng cách kiểm tra mã trạng thái gửi bởi máy chủ. Nếu mã trạng thái là 201, bingo! Việc tạo phòng đã đi tốt. Mã trạng thái khác với 201 có nghĩa là những thứ khác nhau, nhưng hãy tập trung vào 201 cho mục đích của chúng tôi.
- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence
{
NSXMLElement *x = [presence elementForName:@"x" xmlns:@"http://jabber.org/protocol/muc#user"];
for (NSXMLElement *status in [x elementsForName:@"status"])
{
switch ([status attributeIntValueForName:@"code"])
{
case 201: [self notifyRoomCreationOk:room];
}
}
}
Sau đó, chúng tôi nói với máy chủ rằng chúng tôi đang tạo phòng loại "tức thì" có nghĩa là chúng tôi sẽ gửi phần tử IQ cho biết mặc định phòng. notifyRoomCreationOk là một phương thức được gọi trong một khung nhìn khác khi tạo phòng thành công, sau khi tất cả tôi phải ghi lại phòng trong một tệp văn bản để làm cho nó liên tục để lần sau tôi mở ứng dụng, phòng tôi đã tạo trước đó sẽ hiển thị. Trong phương thức notifyRoomCreationOk của tôi, tôi đã gửiDefaultRoomConfig, về cơ bản, mô tả những gì được nêu trong câu đầu tiên của đoạn này.
-(void)sendDefaultRoomConfig:(NSString *)room
{
NSXMLElement *x = [NSXMLElement elementWithName:@"x" xmlns:@"jabber:x:data"];
[x addAttributeWithName:@"type" stringValue:@"submit"];
NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"http://jabber.org/protocol/muc#owner"];
[query addChild:x];
XMPPIQ *iq = [XMPPIQ iq];
[iq addAttributeWithName:@"id" stringValue:[NSString stringWithFormat:@"inroom-cr%@", room]];
[iq addAttributeWithName:@"to" stringValue:room];
[iq addAttributeWithName:@"type" stringValue:@"set"];
[iq addChild:query];
[[self xmppStream ] sendElement:iq];
}
Đảm bảo rằng bạn đã bật XMPPStream trên chế độ xem gọi các phương thức trên, nếu không, các tính năng này sẽ không hoạt động. Thats tất cả để có nó. Vui chơi XMPP-ing!
bạn có thể liên kết qn với các trang web khác mà bạn đã sắp xếp không ?? –
@LithuThiruvathira Bạn có thể lấy khuôn khổ từ đây: https://github.com/robbiehanson/XMPPFramework –
Hãy xem câu trả lời của tôi cho câu hỏi tương tự http: // stackoverflow.com/questions/11791022/trouble-create-xmpp-muc-room-code-503-service-available/14708653 # 14708653 –