[vassalengine-svn] SF.net SVN: vassalengine:[5539] VASSAL-src/branches/uckelman-3.1/src/VASSAL /cha
Brought to you by:
rodneykinney,
uckelman
From: <uck...@us...> - 2009-04-23 20:11:15
|
Revision: 5539 http://vassalengine.svn.sourceforge.net/vassalengine/?rev=5539&view=rev Author: uckelman Date: 2009-04-23 20:11:07 +0000 (Thu, 23 Apr 2009) Log Message: ----------- Fixed Bug: server write threads persist after connections are closed Modified Paths: -------------- VASSAL-src/branches/uckelman-3.1/src/VASSAL/chat/node/SocketHandler.java Modified: VASSAL-src/branches/uckelman-3.1/src/VASSAL/chat/node/SocketHandler.java =================================================================== --- VASSAL-src/branches/uckelman-3.1/src/VASSAL/chat/node/SocketHandler.java 2009-04-23 04:31:49 UTC (rev 5538) +++ VASSAL-src/branches/uckelman-3.1/src/VASSAL/chat/node/SocketHandler.java 2009-04-23 20:11:07 UTC (rev 5539) @@ -20,7 +20,8 @@ import java.io.IOException; import java.net.Socket; -import java.util.LinkedList; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; /** * Copyright (c) 2003 by Rodney Kinney. All rights reserved. @@ -29,7 +30,7 @@ public abstract class SocketHandler { protected Socket sock; protected SocketWatcher handler; - private LinkedList<String> writeQueue = new LinkedList<String>(); + private BlockingQueue<String> writeQueue = new LinkedBlockingQueue<String>(); private boolean isOpen = true; private Thread readThread; private Thread writeThread; @@ -91,13 +92,10 @@ String line; try { while (true) { - line = getLine(); - if (line != null) { + if ((line = getLine()) != null) { writeNext(line); + if (SIGN_OFF.equals(line)) break; } - if (SIGN_OFF.equals(line)) { - break; - } } } // FIXME: review error message @@ -114,17 +112,19 @@ return t; } - protected abstract void closeStreams() throws IOException ; + protected abstract void closeStreams() throws IOException; protected abstract String readNext() throws IOException; protected abstract void writeNext(String line) throws IOException; public void writeLine(String pMessage) { - synchronized (writeQueue) { - writeQueue.addLast(pMessage); - writeQueue.notifyAll(); + try { + writeQueue.put(pMessage); } + catch (InterruptedException e) { + e.printStackTrace(); + } } public void close() { @@ -145,25 +145,21 @@ // FIXME: review error message catch (IOException ignore) { } + + close(); isOpen = false; handler.socketClosed(this); } } private String getLine() { - synchronized (writeQueue) { - if (writeQueue.isEmpty()) { - try { - writeQueue.wait(); - } - catch (InterruptedException e) { - } - } - String message = ""; //$NON-NLS-1$ - if (!writeQueue.isEmpty()) { - message = writeQueue.removeFirst(); - } - return message; + try { + return writeQueue.take(); } + catch (InterruptedException e) { + e.printStackTrace(); + } + + return null; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |