Google Talk получает сообщения с другого ресурса jid - PullRequest
2 голосов
/ 15 декабря 2011

Я думаю, что делаю что-то не так.Я хочу отправить сообщение XMPP на мой идентификатор GTalk, но я не хочу, чтобы приложение GTalk получало сообщение, поэтому я изменяю ресурс JID получателя.

Моя проблема заключается в том, что GTalk получает всесообщения, хотя и имеют другой ресурс.

Мой код:

public void doPost(HttpServletRequest req,
        HttpServletResponse resp) throws IOException {

    // Parse incoming message
    XMPPService xmpp = XMPPServiceFactory.getXMPPService();
    Message msg = xmpp.parseMessage(req);
    JID jid = msg.getFromJid();
    String body = msg.getBody();

    String jidID = jid.getId().split("/")[0];
    JID jid2 = new JID(jidID+"/myownresource453242352");

    String response =  jid2.getId() + " " + body;

    // Send out response
    msg = new MessageBuilder().withRecipientJids(jid2).withBody(response).build();
    xmpp.sendMessage(msg);

}

Вывод:

  • Рафа Эспиллаке, 18:33 - Вы не должныне отвечайте!

  • prueba-gae-gdx@appspot.com, 18:33 - rafaespillaque@gmail.com/myownresource453242352 Вы не должны отвечать!

Что не так?

ОБНОВЛЕНИЕ:

Теперь я отправляю сообщения на myapp@appspot.com/bot от клиента aSmack, и оно отправляет мне сообщение на моемclient.

Проблема в том, что GTalk для Gmail и GTalk для Android регистрирует все отправленные сообщения, но они не получают ответы приложения.Другие клиенты не показывают сообщения, которые я не отправлял вместе с ними.

Смогу ли я скрыть свои сообщения в Gmail и Android?

Мой код:

СЕРВЕР

  public void doPost(HttpServletRequest req,
  HttpServletResponse resp) throws IOException {
  LOG.setLevel(Level.INFO);
// Parse incoming message
XMPPService xmpp = XMPPServiceFactory.getXMPPService();
Message msg = xmpp.parseMessage(req);

LOG.info(msg.getStanza());

JID jid = msg.getFromJid();
String body = msg.getBody();

String response =  "FullID: "+jid.getId()+" El mensaje recibido es: "+body;

// Send out response
msg = new MessageBuilder().
    withRecipientJids(jid)
    .withMessageType(MessageType.NORMAL)
    .withBody(response)
    .build();
xmpp.sendMessage(msg);

}

КЛИЕНТ:

ConnectionConfiguration connectionConfiguration = new ConnectionConfiguration("talk.google.com", 5222, "gmail.com");
                    XMPPConnection connection = new XMPPConnection(connectionConfiguration);
                    try {
                        Log.i("TAG","Trying to connect");
                        connection.connect();
                        Log.i("TAG","Connected");
                        SASLAuthentication.supportSASLMechanism("PLAIN", 0);
                        Log.i("TAG","Trying to Log In");
                        connection.login("rafaespillaque@gmail.com",mypass, mires");
                        Log.i("TAG","Logged In");
                    } catch (XMPPException e) {
                        e.printStackTrace();
                        Log.i("TAG","Problem connecting or logging in");
                    }
                    //Creating chat object for processing friend chat
                    Chat chat = connection.getChatManager().createChat(Server, new MessageListener() {
                        //Overriding process message function of MessageListener Interface which will be 
                                    //called whenever a message is received
                        @Override
                        public void processMessage(Chat c, Message m) {
                            //Displaying message sent by friend
                            //System.out.println(friendId+ " : " + m.getBody());
                            Log.i("TAG", m.getBody());
                            message = m.getBody();
                        }   
                    });
                    try {
                        Message out = new Message();
                        out.setBody("Definitivo22222222");
                        out.setType(Type.normal);
                        chat.sendMessage(out);
                        Log.i("TAG", "Mensaje enviado");
                    } catch (XMPPException e) {
                        Log.i("TAG", "No se envió el mensaje");
                        e.printStackTrace();
                    }

Последнее: я видел в журналах AppEngine, что Stanza, полученный от aSmack, не имеет нормального типано тип чата.

Спасибо за помощь !!

Последнее: Вы можете проверить, что делает Gmail, одновременно подключаясь к любому клиенту и Gmail и общаясь с клиентом.Gmail получает ваши сообщения.

Еще раз спасибо.

Другое дело: моя цель - использовать XMPP для связи двух клиентов игры с их учетной записью Gmail.Вы знаете альтернативу?

Ответы [ 3 ]

5 голосов
/ 17 декабря 2011

См. RFC 6120, раздел 10.5.4 :

Если JID, содержащийся в атрибуте 'to', имеет вид localpart@domainpart/resourcepart и пользователь существует, но есть нет подключенного ресурса, который точно соответствует полному JID, раздел СЛЕДУЕТ обрабатывать так, как если бы JID имели форму localpart@domainpart как описано в разделе 10.5.3.2 .

Если вы отправляете на неверный ресурс, сервер обрабатывает его так, как если бы вы отправили его на пустой JID. В GoogleTalk это относится ко всем ресурсам с неотрицательным приоритетом.

2 голосов
/ 13 февраля 2012

Если вы отправите сообщение с JID и ресурсом (user @ yoursever / reourcex), то получающий сервер направит ваш запрос предполагаемому получателю.Принимающий сервер решит, как маршрутизировать JID / ресурс.

Стандартный сервер будет искать точное совпадение отправленного JID / ресурса.Если он найден, он будет вести себя как положено, и сообщение будет доставлено.Если это не удастся, с другой стороны, он отправит сообщение на онлайн-ресурс с наивысшим приоритетом.Если это не удастся, он будет хранить сообщение в автономном режиме.

В случае Google Talk это произойдет: он будет пытаться сопоставить точный ресурс, а в случае неудачи транслирует его на все онлайн-ресурсы.То же самое также применяется, если ресурс не включен.

2 голосов
/ 15 декабря 2011

Я думаю, что это по замыслу.IIRC GTalk направляет все сообщения для данного JID на все подключенные ресурсы JID.Это даже верно, если сообщение имеет полный JID как to.

...