@Override
	public synchronized Message process(ClientState state, Message request) {
		// Read in the Request
		if (!parseMessage(request)) {
			//return failure
			return null;
		}
		
		//Check for missing or invalid parameters
		if (myQuestion.equals("")) //missing question
			return writeFailureResponse("No question has been provided");
		if (myType == EventType.ERROR) 
			return writeFailureResponse("Unrecognized event type");
		if (myBehavior == Behavior.ERROR) 
			return writeFailureResponse("Unrecognized event behavior");
		if (numOfRounds < 0)
			return writeFailureResponse("Set at least 0 rounds of edge selection");
		//if (numOfChoices < 1)
		//	return writeFailureResponse("Ensure that there can be at least 1 choice");
		//if (myType == EventType.CLOSED && myChoices.size() != numOfChoices) 
		//	return writeFailureResponse("Moderator must set every choice in a closed event prior to creating event");
		if (moderator == null) 
			return writeFailureResponse("A Moderator must be included in the create request");
		
		//I generate the event Id and return it to the client.  probably something better than the massive UUID string
		myEventId = UUID.randomUUID().toString();
		dleDate = new Date();
		
		//instantiate the DLE
		createdDLE = new DecisionLineEvent(myEventId, myQuestion, numOfChoices, numOfRounds, myType, myBehavior);
		createdDLE.setModerator(moderator);
		createdDLE.setDate(dleDate);
		User newModerator = new User(moderator, moderatorPassword, 0, numOfRounds);
		createdDLE.setCurrentTurn(newModerator);
		
		//add the appropriate choices
		for (int i = 0; i < myChoices.size(); i++)
			createdDLE.getChoices().add(myChoices.get(i));
		
		//set the moderator also as a user
		createdDLE.getUsers().add(newModerator);
		
		//Update the model appropriately
		Model.getInstance().getDecisionLineEvents().add(createdDLE);
		
		//Write to the database
		DatabaseSubsystem.writeDecisionLineEvent(createdDLE);
		
		/*
		 * Register client so that future requests can use the clientIdServer to tie back to this user and determine when
		 * there are no longer any users connected to a DLE 
		 */
		createdDLE.addClientConnection(newModerator.getUser(), state.id());
		
		return writeSuccessResponse(); //this specific message is sent back to the requesting client
	}