Primefaces отправляет частный канал не в ту комнату / пользователь / пользователь / пользователь /

Когда я тестирую пример push Primefaces (5.2) (счетчик, уведомление, обмен фотографиями), все работают полностью, за исключением чата (тот же код из основных шрифтов страницы, скопируйте и вставьте код из примера страницы), здесь появляется деталь:

  1. имя пользователя: "felipe" войти (работа с личным сообщением)

частный канал = / pushmob / primepush / {room} / felipe

  1. имя пользователя: "felipe" выйти

  2. имя пользователя: "felipe" войти в систему (личное сообщение не работает)

частный канал = / pushmob / primepush / {room} / felipe / felipe

Другой логин не может отправить личное сообщение Фелипе.

Для обнаружения частного канала я использую в консоли PF ('подписчик'). Cfg.request.url

Любая идея???

PrimeFaces 5.2

Атмосфера 2.3.4

Тот же код из примера чата.

web.xml

<servlet>
    <servlet-name>Push Servlet</servlet-name>
    <servlet-class>org.primefaces.push.PushServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
</servlet>

<servlet-mapping>
    <servlet-name>Push Servlet</servlet-name>
    <url-pattern>/primepush/*</url-pattern>
</servlet-mapping>

index.xhtml

<p:socket onMessage="handleMessageChat" channel="/{room}"
            autoConnect="false" widgetVar='subscriber' />

chatview.xhtml

public class ChatView implements Serializable {

private final static String CHANNEL = "/{room}/";

public void sendGlobal() {
    eventBus.publish(CHANNEL + "*", username + ": " + globalMessage);

    globalMessage = null;
}

public void sendPrivate() {
    eventBus.publish(CHANNEL + privateUser, "[PM "+ username + "] " + username + ": "
            + privateMessage);
    eventBus.publish(CHANNEL + username, "[PM " + privateUser + "] " + username + ": "
            + privateMessage);
    privateMessage = null;
}

public void login() {
    RequestContext requestContext = RequestContext.getCurrentInstance();

    if(users.contains(username)) {
        loggedIn = false;
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Username taken", "Try with another username."));
        requestContext.update("growl");
    }
    else {
        users.add(username);
        requestContext.execute("PF('subscriber').connect('/" + username + "')");
        loggedIn = true;
    }
}

public void disconnect() {
    //remove user and update ui
    users.remove(username);
    RequestContext.getCurrentInstance().update("form:users");

    //push leave information
    eventBus.publish(CHANNEL + "*", username + " left the channel.");

    //reset state
    loggedIn = false;
    username = null;
}

} }


person fylex    schedule 02.11.2015    source источник


Ответы (1)


Решено ... Мне пришлось создать две страницы, одну для входа в систему, а другую для чата, что позволяет успешно использовать частный канал.

person fylex    schedule 10.11.2015