Java tutorial
/* * Copyright 2013 John Ahlroos * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package fi.jasoft.remoteconnection; import java.util.UUID; import com.vaadin.annotations.Theme; import com.vaadin.server.VaadinRequest; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.FormLayout; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.NativeButton; import com.vaadin.ui.Notification; import com.vaadin.ui.Notification.Type; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.UI; import fi.jasoft.remoteconnection.shared.ConnectedListener; import fi.jasoft.remoteconnection.shared.IncomingChannelConnectionListener; import fi.jasoft.remoteconnection.shared.RemoteChannel; import fi.jasoft.remoteconnection.shared.RemoteConnection; import fi.jasoft.remoteconnection.shared.RemoteConnectionDataListener; @Theme("ServerExample") public class ServerExampleUI extends UI { private RemoteConnection peer; private TextArea messages; private Label myId; protected void init(VaadinRequest request) { /* * Setup the remote connection and start listening for messages */ initConnection(); /* * Build the chat application UI */ buildUI(); } private void initConnection() { // Create a connection peer = ServerRemoteConnection.register(this); peer.getConfiguration().setId(UUID.randomUUID().toString()); // Connect to pairing server peer.connect(); // Listen to incoming data peer.addDataListener(new RemoteConnectionDataListener() { @Override public void dataRecieved(RemoteChannel channel, String data) { messages.setValue(messages.getValue() + channel.getId() + " >> " + data + "\n"); } }); // Listen for incoming connections peer.addIncomingConnectionListener(new IncomingChannelConnectionListener() { @Override public void connected(RemoteChannel channel) { Notification.show(channel.getId() + " is connected.", Type.TRAY_NOTIFICATION); } }); // Listen for when signalling server is connected peer.addConnectedListener(new ConnectedListener() { @Override public void connected(String peerId) { myId.setValue(peerId); Notification.show("Connection establised.", Type.TRAY_NOTIFICATION); } }); } private void buildUI() { FormLayout vl = new FormLayout(); setContent(vl); // Our id myId = new Label("Connecting..."); myId.setCaption("My id:"); vl.addComponent(myId); // Remote id final TextField remoteId = new TextField(); remoteId.setWidth("100%"); NativeButton connectToRemote = new NativeButton("Connect", new Button.ClickListener() { @Override public void buttonClick(final ClickEvent event) { final RemoteChannel channel = peer.openChannel(remoteId.getValue()); channel.addConnectedListener(new ConnectedListener() { @Override public void connected(String channelId) { remoteId.setReadOnly(true); event.getButton().setVisible(false); Notification.show("Connected to " + channelId, Type.TRAY_NOTIFICATION); } }); } }); HorizontalLayout hl = new HorizontalLayout(remoteId, connectToRemote); hl.setExpandRatio(remoteId, 1); hl.setWidth("100%"); hl.setCaption("Remote id: "); vl.addComponent(hl); // Message display where messages are displayed messages = new TextArea(); messages.setWidth("100%"); vl.addComponent(messages); // Message field final TextField message = new TextField(); message.setWidth("100%"); NativeButton send = new NativeButton("Send", new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { // Show message in message window messages.setValue( messages.getValue() + peer.getConfiguration().getId() + " >> " + message.getValue() + "\n"); // Broadcast the message to all connected peers peer.broadcast(message.getValue()); message.setValue(""); } }); hl = new HorizontalLayout(message, send); hl.setExpandRatio(message, 1); hl.setWidth("100%"); hl.setCaption("Send message: "); vl.addComponent(hl); } }