public void packetReceived( DatagramPacket pack ) throws IOException {
		try {
			RCMessage mess = CrappyCodec.decode(pack.getData(), 0, pack.getLength(), RCMessage.class);
			switch( mess.messageType ) {
			case OPEN_SUBSCRIPTION:
				clientAddress = pack.getSocketAddress();
				System.err.println("Client's at "+clientAddress);
				
				VizState vs;
				try {
					vs = getVizState();
				} catch( ResourceNotFound e ) {
					System.err.println("Failed to make viz state");
					e.printStackTrace();
					return;
				}
				
				RCMessage response = new RCMessage(
					mess.channelId, mess.order+1, MessageType.INFO, "/visual",
					vs, false
				);
				int z = CrappyCodec.encode(response, pack.getData());
				if( z >= 0 ) {
					pack.setLength(z);
					assert sock != null;
					assert pack != null;
					System.err.println("Sender: Sending "+pack.getLength()+"-byte packet");
					sock.send(pack);
				} else {
					System.err.println("Couldn't fit the VizState in a packet!");
				}
				
				break;
			default:
				System.err.println("Server: Ignoring "+mess.messageType);
			}
		} catch( ClassCastException e ) {
			e.printStackTrace();
		} catch( ClassNotFoundException e ) {
			e.printStackTrace();
		}
	}