CSpriteNode receive the events and then dispatch the custom event class CTouchEvent object with related event message.
CInputSystem respondes to only events which are not handled by CSpriteNode and broadcast the event, call the related listeners.
CControllerComponent added to receive and manage events which is dispatched by CSpriteNode but still not sure the suitability of it. Whether a component needs to receive touch inputs, actually CController is a overage layer couse the component which needs touch events could listen across the entity without CControllerComponent.