@Override
	public synchronized Message process (ClientState st, Message request) {
		Node child = request.contents.getFirstChild();
		String type = child.getLocalName();
		
		System.out.println ("Receiving: " + request);
		
		/* this code is never called, because the ConnectResponse is handled by the Server at a lower level before it gets here
		if (type.equals("connectRequest")) 
			return new ConnectToDLEController().process(st, request);
		*/
		if (type.equals("addChoiceRequest")) 
			return new AddChoiceController().process(st,  request);
		else if (type.equals("addEdgeRequest")) 
			return new AddEdgeController().process(st, request);
		else if (type.equals("adminRequest")) 
			return new AdminLogInController().process(st, request);
		else if (type.equals("closeRequest")) 
			return new CloseOpenDLEController().process(st, request);
		else if (type.equals("createRequest")) 
			return new CreateDLEController().process(st, request);
		else if (type.equals("forceRequest")) 
			return new ForceFinishController().process(st, request);
		else if (type.equals("removeRequest")) 
			return new RemoveDLEController().process(st, request);
		else if (type.equals("reportRequest")) 
			return new ProduceReportController().process(st, request);
		else if (type.equals("signInRequest")) 
			return new SignIntoDLEController().process(st, request);
		
		// unknown? no idea what to do
		System.err.println("Unable to handle message:" + request);
		return null;
	}