Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2008-12-09 19:06:56 +0000
committerEike Stepper2008-12-09 19:06:56 +0000
commit96f34f3850eb9fdff6bd10830189b28f9e5cbfc7 (patch)
treeaae273411527d2d54947962b1bf12d5e62f089b9 /plugins/org.eclipse.net4j.examples/src/org/eclipse
parentd6508d69ff0bb040c2ff460a03dd096de65d679c (diff)
downloadcdo-96f34f3850eb9fdff6bd10830189b28f9e5cbfc7.tar.gz
cdo-96f34f3850eb9fdff6bd10830189b28f9e5cbfc7.tar.xz
cdo-96f34f3850eb9fdff6bd10830189b28f9e5cbfc7.zip
[258067] Provide RequestWithMonitoring example
https://bugs.eclipse.org/bugs/show_bug.cgi?id=258067
Diffstat (limited to 'plugins/org.eclipse.net4j.examples/src/org/eclipse')
-rw-r--r--plugins/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/echo/client/EchoClientProtocol.java14
-rw-r--r--plugins/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/echo/server/EchoServerProtocol.java8
-rw-r--r--plugins/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/transfer/UploadClientAction.java168
3 files changed, 171 insertions, 19 deletions
diff --git a/plugins/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/echo/client/EchoClientProtocol.java b/plugins/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/echo/client/EchoClientProtocol.java
index df40d959d6..375c42a4b3 100644
--- a/plugins/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/echo/client/EchoClientProtocol.java
+++ b/plugins/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/echo/client/EchoClientProtocol.java
@@ -13,7 +13,6 @@ package org.eclipse.net4j.examples.echo.client;
import org.eclipse.net4j.connector.IConnector;
import org.eclipse.net4j.examples.echo.EchoProtocol;
import org.eclipse.net4j.signal.SignalProtocol;
-import org.eclipse.net4j.signal.SignalReactor;
/**
* @author Eike Stepper
@@ -23,18 +22,7 @@ public class EchoClientProtocol extends SignalProtocol<Object> implements EchoPr
{
public EchoClientProtocol(IConnector connector)
{
+ super(PROTOCOL_NAME);
open(connector);
}
-
- public String getType()
- {
- return PROTOCOL_NAME;
- }
-
- @Override
- protected SignalReactor createSignalReactor(short signalID)
- {
- // On client side only needed for server initiated requests
- return null;
- }
}
diff --git a/plugins/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/echo/server/EchoServerProtocol.java b/plugins/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/echo/server/EchoServerProtocol.java
index 54e468761b..3b45240c3f 100644
--- a/plugins/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/echo/server/EchoServerProtocol.java
+++ b/plugins/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/echo/server/EchoServerProtocol.java
@@ -25,11 +25,7 @@ public class EchoServerProtocol extends SignalProtocol<Object> implements EchoPr
{
public EchoServerProtocol()
{
- }
-
- public String getType()
- {
- return PROTOCOL_NAME;
+ super(PROTOCOL_NAME);
}
@Override
@@ -41,7 +37,7 @@ public class EchoServerProtocol extends SignalProtocol<Object> implements EchoPr
return new EchoIndication(this);
default:
- return null;
+ return super.createSignalReactor(signalID);
}
}
diff --git a/plugins/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/transfer/UploadClientAction.java b/plugins/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/transfer/UploadClientAction.java
new file mode 100644
index 0000000000..79f448cd68
--- /dev/null
+++ b/plugins/org.eclipse.net4j.examples/src/org/eclipse/net4j/examples/transfer/UploadClientAction.java
@@ -0,0 +1,168 @@
+/***************************************************************************
+ * Copyright (c) 2004 - 2008 Eike Stepper, Germany.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http:www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ **************************************************************************/
+package org.eclipse.net4j.examples.transfer;
+
+import org.eclipse.net4j.connector.IConnector;
+import org.eclipse.net4j.internal.examples.bundle.OM;
+import org.eclipse.net4j.signal.RequestWithMonitoring;
+import org.eclipse.net4j.signal.SignalProtocol;
+import org.eclipse.net4j.util.container.IPluginContainer;
+import org.eclipse.net4j.util.io.ExtendedDataInputStream;
+import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
+import org.eclipse.net4j.util.om.monitor.EclipseMonitor;
+import org.eclipse.net4j.util.om.monitor.OMMonitor;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+
+public class UploadClientAction implements IWorkbenchWindowActionDelegate, UploadProtocol
+{
+ private IWorkbenchWindow window;
+
+ public UploadClientAction()
+ {
+ }
+
+ public void init(IWorkbenchWindow window)
+ {
+ this.window = window;
+ }
+
+ public void run(IAction action)
+ {
+ FileDialog fileDialog = new FileDialog(window.getShell());
+ final String path = fileDialog.open();
+ if (path != null)
+ {
+ final File file = new File(path);
+ new Job("Uploading file")
+ {
+ @Override
+ protected IStatus run(IProgressMonitor monitor)
+ {
+ try
+ {
+ boolean replaced = transferFile(file, monitor);
+ OM.LOG.info("File " + path + (replaced ? " replaced" : " stored") + " on the Net4j server.");
+ return Status.OK_STATUS;
+ }
+ catch (Exception ex)
+ {
+ return new Status(IStatus.ERROR, OM.BUNDLE_ID, "Problem with upload of " + path, ex);
+ }
+ finally
+ {
+ monitor.done();
+ }
+ }
+ }.schedule();
+ }
+ }
+
+ public void selectionChanged(IAction action, ISelection selection)
+ {
+ }
+
+ public void dispose()
+ {
+ }
+
+ private boolean transferFile(final File file, IProgressMonitor monitor) throws Exception
+ {
+ SignalProtocol<Object> protocol = null;
+
+ try
+ {
+ // Start a connector that represents the client side of a physical connection
+ IConnector connector = (IConnector)IPluginContainer.INSTANCE.getElement("org.eclipse.net4j.connectors", "tcp",
+ "localhost:2036");
+
+ // Open a virtual channel with the ECHO protocol, send an ECHO request and close the channel
+ protocol = new SignalProtocol<Object>(PROTOCOL_NAME);
+ protocol.open(connector);
+
+ UploadRequest request = new UploadRequest(protocol, file);
+ EclipseMonitor e = new EclipseMonitor(monitor);
+ return request.send(e);
+ }
+ finally
+ {
+ protocol.close();
+ }
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static final class UploadRequest extends RequestWithMonitoring<Boolean>
+ {
+ private File file;
+
+ public UploadRequest(SignalProtocol<?> protocol, File file)
+ {
+ super(protocol, UPLOAD_SIGNAL_ID);
+ this.file = file;
+ }
+
+ @Override
+ protected void requesting(ExtendedDataOutputStream out, OMMonitor monitor) throws Exception
+ {
+ long size = file.length();
+ out.writeLong(size);
+ out.writeString(file.getName());
+
+ monitor.begin((int)size);
+ BufferedInputStream in = null;
+
+ try
+ {
+ in = new BufferedInputStream(new FileInputStream(file));
+ while (size != 0L)
+ {
+ int chunk = BUFFER_SIZE;
+ if (size < BUFFER_SIZE)
+ {
+ chunk = (int)size;
+ }
+
+ byte[] buffer = new byte[chunk];
+ in.read(buffer);
+ out.writeByteArray(buffer);
+
+ monitor.worked(chunk);
+ size -= chunk;
+ }
+ }
+ finally
+ {
+ monitor.done();
+ in.close();
+ }
+ }
+
+ @Override
+ protected Boolean confirming(ExtendedDataInputStream in, OMMonitor monitor) throws Exception
+ {
+ return in.readBoolean();
+ }
+ }
+}

Back to the top