public void listenUsersHands() throws InvalidSubscriptionException,
			IOException {

		waitHandsSub = elvin.subscribe(NOT_TYPE + " == '" + BROADCAST_HAND
				+ "' && " + GAME_ID + " == '" + gameHost.getID() + "'");

		waitHandsSub.addListener(new NotificationListener() {
			public void notificationReceived(NotificationEvent e) {

				ByteArrayInputStream bis;
				ObjectInput in;
				User tmpUser;
				byte[] tmpBytes = (byte[]) e.notification.get(USER_HAND);

				try {
					bis = new ByteArrayInputStream(tmpBytes);
					in = new ObjectInputStream(bis);
					tmpUser = (User) in.readObject();
					bis.close();
					in.close();

					if (findUserByID(tmpUser.getID()) == null) {
						return;
					}

					if (sigServ.validateVerifiedSignature(
							(byte[]) e.notification.get(SIGNATURE),
							tmpUser.getPublicKey(), SigService.RAW_HAND_NONCE)) {
						usersHands.add(tmpUser);
						return;
					} else {
						// sig failed!
						callCheat(SIGNATURE_FAILED);
						System.exit(0);
					}

				} catch (Exception e1) {
					shutdown();
					System.exit(0);
				}

			}
		});

	}