# HG changeset patch # User e085711 # Date 1310038301 -32400 # Node ID 089bd4510538b9c7259e7db76658dab8e6f5e967 # Parent 458a231f060d5ed1cfe882340e23169fee358bce add MultiThreadTee.java diff -r 458a231f060d -r 089bd4510538 src/myVncProxy/MyRfbProto.java --- a/src/myVncProxy/MyRfbProto.java Thu Jul 07 18:54:01 2011 +0900 +++ b/src/myVncProxy/MyRfbProto.java Thu Jul 07 20:31:41 2011 +0900 @@ -97,6 +97,7 @@ servSock = new ServerSocket(port); acceptPort = port; } + // 5550を開けるが、開いてないなら+1のポートを開ける。 void selectPort(){ int i = 5550; while(true){ diff -r 458a231f060d -r 089bd4510538 src/myVncProxy/RfbProto.java --- a/src/myVncProxy/RfbProto.java Thu Jul 07 18:54:01 2011 +0900 +++ b/src/myVncProxy/RfbProto.java Thu Jul 07 20:31:41 2011 +0900 @@ -223,8 +223,8 @@ timeWaitedIn100us = 5; timedKbits = 0; } - - + + synchronized void close() { try { diff -r 458a231f060d -r 089bd4510538 src/myVncProxy/VncProxyService.java --- a/src/myVncProxy/VncProxyService.java Thu Jul 07 18:54:01 2011 +0900 +++ b/src/myVncProxy/VncProxyService.java Thu Jul 07 20:31:41 2011 +0900 @@ -101,9 +101,8 @@ fatalError("Network error: could not connect to server: " + host + ":" + port, e); }catch(Exception e){} - + rfbThread = new Thread(this); - accThread = new Thread(new acceptThread(rfb)); } diff -r 458a231f060d -r 089bd4510538 src/test/MultiThreadTee.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/test/MultiThreadTee.java Thu Jul 07 20:31:41 2011 +0900 @@ -0,0 +1,87 @@ +package test; + +import java.util.LinkedList; +import java.util.concurrent.SynchronousQueue; + +public class MultiThreadTee { + + static class Parent extends Thread { + LinkedList> clients = new LinkedList>(); + + + SynchronousQueue accept() { + + SynchronousQueue s = new SynchronousQueue(); + clients.add(s); + + return s; + + + } + + void put(String s) throws InterruptedException { + for (SynchronousQueue queue : clients) { + queue.put(s); + + } + + } + + } + + + + static class Client extends Thread { + Parent p; + private SynchronousQueue queue; + + + + + public Client(Parent p2) { + p = p2; + } + + public void run() { + queue = p.accept(); + + String item; +// while(!(item = queue.poll()).equals("") ) { + while(true) { + item = queue.poll(); + if(item == null) continue; + if(item.equals("")) return; + System.out.println(item); + } + } + + } + + static public void main (String[] argv) throws InterruptedException { + int num = 3; + Parent p = new Parent(); + Client[] cs = new Client[num]; + for (int i=0; i < num; i++ ) { + cs[i] = new Client(p); + } + + p.start(); + for (int i = 0; i < num; i++) { + cs[i].start(); + } + p.put("TEST1"); + p.put("TEST2"); + p.put("TEST3"); + p.put(""); + + p.join(); + for (int i = 0; i < num; i++) { + cs[i].join(); + } + + + + + } +} +