GWT XMPP клиент, использующий GWT-Strophe - PullRequest
0 голосов
/ 08 июля 2011

Я использую GWT-Strophe для подключения к моему XMPP-серверу. Все идет хорошо, и я могу подключиться к своему XMPP-серверу и отправлять сообщения другим пользователям. У меня проблема с получением сообщений. Я пытаюсь скопировать пример эхобота Strophe, но код в моем обработчике не выполняется при получении сообщения.

Вот код, который я использую для подключения и регистрации обработчика:

connection = new Connection("http://localhost/proxy/");
handler = new Handler<Element>() {

    @Override
    public boolean handle(Element element) {
        GWT.log("Handling...");
        GWT.log(element.toString());

        String to = element.getAttribute("to");
        String from = element.getAttribute("from");
        String type = element.getAttribute("type");

        NodeList<com.google.gwt.dom.client.Element> elems = element.getElementsByTagName("body");

        if ((type == null ? "chat" == null : type.equals("chat")) && elems.getLength() > 0) {
            Element body = (Element) elems.getItem(0);

            GWT.log("ECHOBOT: I got a message from " + from + ": " + body.getText());
            String[][] attributes = {{"to", from}, {"from", to}, {"type", "chat"}};    
            Builder reply = Builder.$msg(attributes).cnode(body.copy());    
            connection.send(reply.tree());

            GWT.log("ECHOBOT: I sent " + from + ": " + body.getText());
        }    
        return true;
    }
};

StatusCallback callback = new Connection.StatusCallback() {

    @Override
    public void statusChanged(Status status, String reason) {

        if (status == Status.CONNECTING) {
            GWT.log("Strophe is connecting.");
        } else if (status == Status.CONNFAIL) {
            GWT.log("Strophe failed to connect.");
        } else if (status == Status.DISCONNECTING) {
            GWT.log("Strophe is disconnecting.");
        } else if (status == Status.DISCONNECTED) {
            GWT.log("Strophe is disconnected.");
        } else if (status == Status.CONNECTED) {
            GWT.log("Strophe is connected.");
            connection.addHandler(null, null, "message", null, null, handler);
            Builder pres = Builder.$pres(null);
            connection.send(pres);

            GWT.log("ECHOBOT: Send a message to " + connection.getJid() + " to talk to me.");
        }

    }
};

connection.connect("me@myserver.com", "password", callback);

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Измените свою строку

connection.addHandler(null, null, "message", null, null, handler);

на

connection.addHandler(null, "message", null, null, null, handler);

, и она должна работать нормально.

0 голосов
/ 21 марта 2012

Можете ли вы опубликовать здесь, как вы подключили gwt-strophe (если вы успешно подключились)?Или, если вы нашли лучшее решение, пожалуйста, опубликуйте его здесь.Я сделал GWT-совместимый модуль из gwt-strophe (включая gwt.xml и все источники) и использовал его в своем проекте GWT.Во время компиляции не было ошибки, но когда я вызвал свой виджет, он говорит: «Не удается прочитать свойство« Соединение »из неопределенного».После некоторой проверки кода я не нашел, где инициализируется объект Strophe

private native JavaScriptObject connection(String boshService) /*-{
    var connection = new $wnd.Strophe.Connection(boshService);
    return connection;
}-*/;

Ошибка, возникшая при выполнении во время выполнения, потому что объект window.Strophe не определен, ps я не нашел здесь, как добавить комментарий, поэтомусделал "ответ", чтобы задать вопрос в этой теме ... Все, что мне нужно, это подключение от GWT к моему серверу openfire

...