Abstract class for GameSession is created in order to ensure listener contract is preserved. 
Game evens splitted into subclasses. Removing of parent class is pending