public void run() {
		FcpMessage fcpMessage = null;
		Throwable throwable = null;
		while (true) {
			synchronized (this) {
				if (shouldStop) {
					break;
				}
			}
			try {
				String line = readLine();
				logger.log(Level.FINEST, "read line: %1$s", line);
				if (line == null) {
					break;
				}
				if (line.length() == 0) {
					continue;
				}
				line = line.trim();
                                //System.err.println("SERVER: " + line); // DCI
				if (fcpMessage == null) {
					fcpMessage = new FcpMessage(line);
					continue;
				}
				if ("EndMessage".equalsIgnoreCase(line) || "Data".equalsIgnoreCase(line)) {
					fcpConnection.handleMessage(fcpMessage);
					fcpMessage = null;
				}
				int equalSign = line.indexOf('=');
				if (equalSign == -1) {
					/* something's fishy! */
					continue;
				}
				String field = line.substring(0, equalSign);
				String value = line.substring(equalSign + 1);
				assert fcpMessage != null : "fcp message is null";
				fcpMessage.setField(field, value);
			} catch (IOException ioe1) {
				throwable = ioe1;
				break;
			}
		}
		fcpConnection.handleDisconnect(throwable);
	}