From: megacz Date: Wed, 11 Mar 2009 22:42:34 +0000 (-0700) Subject: move flow control from Client to Server X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=3bb92d5ae0a4c55ac50f083c96811bf1201d4e7f;p=fleet.git move flow control from Client to Server --- diff --git a/src/edu/berkeley/fleet/fpga/Client.java b/src/edu/berkeley/fleet/fpga/Client.java index 82ea35f..98c187c 100644 --- a/src/edu/berkeley/fleet/fpga/Client.java +++ b/src/edu/berkeley/fleet/fpga/Client.java @@ -85,7 +85,11 @@ public class Client extends FleetProcess { final InputStream is = new BufferedInputStream(is0); - Thread t = new Thread() { + dos.write( (1<<6) | 15); + + Thread t; + /* + t = new Thread() { public void run() { try { while(true) { @@ -104,6 +108,7 @@ public class Client extends FleetProcess { }; t.setDaemon(true); t.start(); + */ t = new Thread() { public void run() { diff --git a/src/edu/berkeley/fleet/fpga/Server.java b/src/edu/berkeley/fleet/fpga/Server.java index f6ec790..412c994 100644 --- a/src/edu/berkeley/fleet/fpga/Server.java +++ b/src/edu/berkeley/fleet/fpga/Server.java @@ -4,6 +4,7 @@ import gnu.io.*; import java.io.*; import java.net.*; import java.util.*; +import java.util.concurrent.Semaphore; // FIXME: accept connections, but stall, during programming public class Server { @@ -108,6 +109,8 @@ public class Server { final OutputStream fos = sp.getOutputStream(); final InputStream fis = new BufferedInputStream(sp.getInputStream()); + final Semaphore sem = new Semaphore(15); + System.err.println("sending instructions..."); new Thread() { public void run() { @@ -115,7 +118,9 @@ public class Server { while(true) { int r = is.read(); if (r == -1) break; - fos.write(r); + synchronized(fos) { + fos.write(r); + } } fos.flush(); } catch (Exception e) { throw new RuntimeException(e); @@ -147,6 +152,11 @@ public class Server { if (closed) { os.flush(); return; } val = fis.read(); if (val==-1) break; + if ((val & (1<<6)) == 0) { + synchronized(fos) { + fos.write( (1<<6) | 1); + } + } System.err.println("byte: 0x"+Integer.toString(val & 0xff, 16)); os.write((byte)val); result |= ((long)val) << (i * 8);