ByteArrayBuilder no longer prefixes the internal ByteBuffer with a
length. This has been moved to NetworkPacket.
Added basic Competition Events, such as competitor
registering/deregistering, new languages added, new problems, and so on.
Added JudgeManager events; furthermore, notifying of successful judging
is now done via the SUBMISSION_JUDGED judging event rather than a
constant polling - with this, a Competition thread is no longer
neccessary.
Added a pointer in ProblemSet to its active Competition - for the
explicit reason of calling the Competition PROBLEM_ADDED,
PROBLEM_REMOVED, and PROBLEM_CHANGED events.
Added a pointer to the ProblemSet that created this problem, in order to
call PROBLEM_CHANGED event.
Competitor no longer has .notifyJudged(), as this has been moved to
Competition (no more networking code in Competitor!).
CompetitionInfo and ProblemSetInfo functions have been greatly expanded
to include removing/adding problems and languages, in order for
competition persistence to work as hoped.
As ProblemSet no longer extends HashSet<Problem>, ScoreManager had to
slightly change its scoring code.
getNextUID() was made public so .register() does not need to be the only
way to create users (though it is still highly recommended).
Added CompetitionChangeAction, which notifies the client when something
with the Competition changes. Also registered it with the client
NetworkActionManager.
Server now registers event listeners to Competition to deal with
Competition persistence across clients - all to abstract networking away
from Competitions.
Simplified events dramatically - for now, no more cancelling or any
other complex behavior. Furthermore, EventReceiver.getPriority() is
removed in favor of passing the priority to the EventHandler.
All classes changed in this commit had any reference to .isCancelled()
removed and all .register events updated to include the priority.
ChatRoom now has its own individual event handler that a client can
subscribe to.
LocalChatRoom now has its own individual event handler.
ClientChatEventArgs now has an additional convienence constructor which
takes in a ChatResponse rather than a ChatResponseReason.
Client chat event handler now has a CHAT_SELF_SPOKE event.
Added UserManager to Competition (removing it from Server and having
Server.getuserManager() point to the Competiton userManager), as well as
added a convienence registerCompetitor function.
UserManager now only has registerUser(), which creates the proper type
of User object based on passed user type.
Added local competition event handlers.