2016-08-08 8 views
0

Openfireでグループチャットを作成しました& XMPP。履歴からメッセージを取得中に重複メッセージを取得する

私はOpenfireサーバーから「since」を使用してルームに参加している履歴を取得しています。それは地元からの最後のメッセージの日付を取得し、その日付以降のすべてのメッセージを取得するためにサーバーに送信し、ログインするとき、私は現地ので、次回のユーザーにメッセージを保存

XMPPRoomMemoryStorage *roomStorage = [[XMPPRoomMemoryStorage alloc] init]; 
XMPPJID *roomJID = [XMPPJID jidWithString:chatWithUser]; 

xmppRoom = [[XMPPRoom alloc] initWithRoomStorage:roomStorage 
              jid:roomJID 
            dispatchQueue:dispatch_get_main_queue()]; 

[xmppRoom activate:self.xmppStream]; 
[xmppRoom addDelegate:self 
     delegateQueue:dispatch_get_main_queue()]; 

NSXMLElement *history = [NSXMLElement elementWithName:@"history"]; 

[history addAttributeWithName:@"since" stringValue:finalDate]; 

[xmppRoom joinRoomUsingNickname:self.xmppStream.myJID.user 
         history:history 
         password:nil]; 

: はここに私のコードです。

finalDate is date from that i fetch from local and send it to server. 

しかし、私は、サーバーにfinalDateを送信するとき、それは私はすでにローカルデータベースに保存されていることも、最後のメッセージを取り出すことが何であるかをhappern。

localDBからの私の最後のメッセージが 'Hi'で日付 '2016-08-08T04:52:42.347Z'よりもサーバーから 'Hi'をフェッチする場合。

これはどうしてですか?私は、日付の後にサーバーからのメッセージが欲しい。

+0

これはあなたに価値があるか等しいかを示しています。過去のメッセージと同じ場合は、それもあなたに与えられたものを意味します。 –

+0

それを克服する方法は? – Kabali

+0

最終日に数秒を追加.... –

答えて

1

XMPP MUC仕様の問題は、サーバーの時刻がスタンプされ、サーバーの時刻がsinceになっています。 XMPPFrameworkにはXMPPAutoTimeというモジュールがあり、時間差を追跡しようとしています。その差をタイムスタンプベースのクエリに追加する必要があります。詳細な説明を確認してくださいhere

+0

私はタイムスタンプを使用して履歴を取得しました。 – Kabali

関連する問題