move flow control from Client to Server
authormegacz <adam@megacz.com>
Wed, 11 Mar 2009 22:42:34 +0000 (15:42 -0700)
committermegacz <adam@megacz.com>
Wed, 11 Mar 2009 22:42:34 +0000 (15:42 -0700)
src/edu/berkeley/fleet/fpga/Client.java
src/edu/berkeley/fleet/fpga/Server.java

index 82ea35f..98c187c 100644 (file)
@@ -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() {
index f6ec790..412c994 100644 (file)
@@ -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);