@Override
	public void run() {
		try {
			if (this.ss != null) {
				this.socket = this.ss.accept();
				this.gm.startTimer();
				this.update(gm, null);
			}
			while (this.active) {
				try {
					InputStream is = socket.getInputStream();
					if (is.available() > 0) {
						DataInputStream dis = new DataInputStream(is);
						ByteArrayInputStream bais = readMessage(dis);
						try {
							Board b = mh.unmarshal(bais);
							this.gm.updateBoard(b, true);
						} catch (JAXBException ex) {
							unreachablePlayer();
							this.gm.updateBoard(this.gm.getBoard(), false);
						}
					}
				} catch (IOException ex) {
					ex.printStackTrace();
				}
			}
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}