public boolean doSendPackage() {
		boolean result = false;
		try {
			synchronized (mOutPkgs) {
				while (mOutPkgs.size() > 0) {
					mBos.reset();
					ObjectOutputStream out = new ObjectOutputStream(mBos);
					NetSystem.Package pkg = mOutPkgs.poll();
					out.writeObject(pkg);

					byte[] data = mBos.toByteArray();
					mBuffer.limit(data.length);
					mBuffer.put(data);
					mBuffer.flip();  // important
					while (mBuffer.hasRemaining())
						mSocketChannel.write(mBuffer);
					mBuffer.clear();
					result = true;
				};
			}
		} catch (Exception e) {
			System.out.print(e.toString() + "\n");
		}
		
		mKey.interestOps(mKey.interestOps() ^ SelectionKey.OP_WRITE);
		return result;
	}