Export to GitHub

gwt-comet - WebSockets.wiki


Getting Started

gwt-web-sockets provides a simple GWT wrapper around the browsers native Web Socket implementation.

Currently only Chrome supports this so don't expect it to work in other browsers. This is not (yet) a cross browser Web Socket implementation.

Its simple design is based around GWT's com.google.gwt.xhr.client.XMLHttpRequest.

GWT Module Dependency

Download gwt-web-sockets.jar from the download list

Then you need to include the following GWT module dependency in your project:

<inherits name="net.zschech.gwt.websockets.WebSockets" />

Create A Web Socket

Create you WebSocket using WebSocket.create(String url).

Set your OpenHandler, CloseHandler and MessageHandler for processing Web Socket events.

Use WebSocket.send(String data) to send messages.

Complete Example

``` import net.zschech.gwt.websockets.client.CloseHandler; import net.zschech.gwt.websockets.client.ErrorHandler; import net.zschech.gwt.websockets.client.MessageEvent; import net.zschech.gwt.websockets.client.MessageHandler; import net.zschech.gwt.websockets.client.OpenHandler; import net.zschech.gwt.websockets.client.WebSocket;

import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.JavaScriptException; import com.google.gwt.dom.client.DivElement; import com.google.gwt.dom.client.Document; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.TextBox;

public class WebSocketEntryPoint implements EntryPoint {

private WebSocket webSocket;

private HTML messages;
private ScrollPanel scrollPanel;

private TextBox url;
private TextBox input;

private Button connect;
private Button disconnect;
private Button send;

@Override
public void onModuleLoad() {

    url = new TextBox();
    url.setValue("ws://websockets.org:8787");
    input = new TextBox();
    input.setValue("Hello World!");

    connect = new Button("Connect", new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            connect();
        }
    });
    disconnect = new Button("Disconnect", new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            webSocket.close();
        }
    });
    send = new Button("Send", new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            webSocket.send(input.getValue());
        }
    });

    messages = new HTML();
    scrollPanel = new ScrollPanel();
    scrollPanel.setHeight("250px");
    scrollPanel.add(messages);

    RootPanel.get().add(scrollPanel);

    FlowPanel controls = new FlowPanel();
    controls.add(url);
    controls.add(connect);
    controls.add(disconnect);
    RootPanel.get().add(controls);

    controls = new FlowPanel();
    controls.add(input);
    controls.add(send);
    RootPanel.get().add(controls);
}

public void connect() {
    try {
        webSocket = WebSocket.create(url.getValue());
        webSocket.setOnOpen(new OpenHandler() {
            @Override
            public void onOpen(WebSocket webSocket) {
                output("open", "silver");
            }
        });
        webSocket.setOnClose(new CloseHandler() {
            @Override
            public void onClose(WebSocket webSocket) {
                output("close", "silver");
            }
        });
        webSocket.setOnError(new ErrorHandler() {
            @Override
            public void onError(WebSocket webSocket) {
                output("error", "red");
            }
        });
        webSocket.setOnMessage(new MessageHandler() {
            @Override
            public void onMessage(WebSocket webSocket, MessageEvent event) {
                output("message: " + event.getData(), "black");
            }
        });
    }
    catch (JavaScriptException e) {
        output(e.toString(), "red");
    }
}

public void output(String text, String color) {
    DivElement div = Document.get().createDivElement();
    div.setInnerText(text);
    div.setAttribute("style", "color:" + color);
    messages.getElement().appendChild(div);
    scrollPanel.scrollToBottom();
}

} ```