Skip to content
Snippets Groups Projects
Commit 3ab53496 authored by Sven Gestegård Robertz's avatar Sven Gestegård Robertz
Browse files

tweaked minimal TCP java example

parent bded2b52
Branches
Tags
No related merge requests found
...@@ -15,7 +15,7 @@ ${LCFILE}.c : ${LCFILE}.lc ...@@ -15,7 +15,7 @@ ${LCFILE}.c : ${LCFILE}.lc
${LCC} -C ${LCFILE}.lc ${LCC} -C ${LCFILE}.lc
.PHONY: clean, runclient .PHONY: clean runclient
clean : clean :
rm ${LCFILE}.c ${LCFILE}.h client testserver rm ${LCFILE}.c ${LCFILE}.h client testserver
......
/*
sample struct {
int x;
int y;
long t;
double d;
} FooSample;
*/
package labcommTCPtest;
import java.io.IOException;
import se.lth.control.labcomm.LabCommDecoder;
import se.lth.control.labcomm.LabCommDispatcher;
import se.lth.control.labcomm.LabCommEncoder;
import se.lth.control.labcomm.LabCommHandler;
import se.lth.control.labcomm.LabCommSample;
public class FooSample implements LabCommSample {
public int x;
public int y;
public long t;
public double d;
public interface Handler extends LabCommHandler {
public void handle_FooSample(FooSample value) throws Exception;
}
public static void register(LabCommDecoder d, Handler h) throws IOException {
d.register(new Dispatcher(), h);
}
public static void register(LabCommEncoder e) throws IOException {
e.register(new Dispatcher());
}
private static class Dispatcher implements LabCommDispatcher {
public Class getSampleClass() {
return FooSample.class;
}
public String getName() {
return "FooSample";
}
public byte[] getSignature() {
return signature;
}
public void decodeAndHandle(LabCommDecoder d,
LabCommHandler h) throws Exception {
((Handler)h).handle_FooSample(FooSample.decode(d));
}
}
public static void encode(LabCommEncoder e, FooSample value) throws IOException {
e.begin(FooSample.class);
e.encodeInt(value.x);
e.encodeInt(value.y);
e.encodeLong(value.t);
e.encodeDouble(value.d);
e.end(FooSample.class);
}
public static FooSample decode(LabCommDecoder d) throws IOException {
FooSample result;
result = new FooSample();
result.x = d.decodeInt();
result.y = d.decodeInt();
result.t = d.decodeLong();
result.d = d.decodeDouble();
return result;
}
private static byte[] signature = new byte[] {
// struct { 4 fields
17,
4,
// int 'x'
1,
120,
35,
// int 'y'
1,
121,
35,
// long 't'
1,
116,
36,
// double 'd'
1,
100,
38,
// }
};
}
package labcommTCPtest;
public class LabCommRegister {
}
package labcommTCPtest.client;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import se.lth.control.labcomm.LabCommDecoderChannel;
import se.lth.control.labcomm.LabCommEncoderChannel;
import labcommTCPtest.FooSample;
import labcommTCPtest.FooSample.Handler;
public class TestClient implements Handler {
private OutputStream out;
private InputStream in;
public TestClient(Socket server) throws IOException {
out = server.getOutputStream();
in = server.getInputStream();
}
public void test() {
try {
LabCommEncoderChannel e = new LabCommEncoderChannel(out );
FooSample.register(e);
FooSample sample = new FooSample();
sample.x = 17;
sample.y = 42;
sample.t = 1717;
sample.d = 0.42;
printSample("Client sending", sample);
FooSample.encode(e, sample);
LabCommDecoderChannel c = new LabCommDecoderChannel(in);
FooSample.register(c,this);
c.runOne();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String... args) {
String server = "localhost";
int port = 9999;
try {
Socket s = new Socket(server, port);
TestClient c = new TestClient(s);
c.test();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void printSample(String header, FooSample sample2) throws Exception {
System.out.println(header);
System.out.format("TestClient.invoke(%d, %d, %d, %f)\n", sample2.x, sample2.y, sample2.t, sample2.d);
}
public void handle_FooSample(FooSample sample2) throws Exception {
printSample("TestClient.handle_FooSample", sample2);
}
}
package labcommTCPtest.server;
/**
* The service object to be accessed remotely via a LabComm channel
*
*/
public class TestObject {
/**
* A test method. The matching LabComm description is in test.lc
*
* @param x
* @param y
* @param t
* @param d
*/
public void foo(int x, int y, long t, double d) {
System.out.format("TestObject.foo(%d, %d, %d, %f)\n", x, y, t, d);
}
}
package labcommTCPtest.server;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.ServerSocket;
import java.net.Socket;
import se.lth.control.labcomm.LabCommDecoderChannel;
import se.lth.control.labcomm.LabCommEncoderChannel;
import labcommTCPtest.FooSample;
import labcommTCPtest.FooSample.Handler;
public class TestServer implements Handler {
private OutputStream out;
private InputStream in;
public static void main(String a[]) {
try {
ServerSocket ss = new ServerSocket(9999);
Socket s = ss.accept();
TestServer ts = new TestServer(s);
ts.runOne();
} catch (IOException e) {
e.printStackTrace();
}
}
public TestServer(Socket s) throws IOException {
out = s.getOutputStream();
in = s.getInputStream();
}
public void runOne() {
try {
LabCommDecoderChannel c = new LabCommDecoderChannel(in);
FooSample.register(c,this);
c.runOne();
} catch (Exception e) {
e.printStackTrace();
}
}
public void handle_FooSample(FooSample sample) throws Exception {
LabCommEncoderChannel e = new LabCommEncoderChannel(out );
FooSample.register(e);
System.out.println("TestServer.handle_FooSample...");
sample.x *= 2;
sample.y *= 2;
sample.t *= 2;
sample.d *= 2;
FooSample.encode(e, sample);
}
}
sample struct {
int x;
int y;
long t;
double d;
} FooSample;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment