Stop swimming against the tide and accept what most of the rest of
the world does.
While it adds an annoying depth to the actual source code, it makes
the root directory nicer (no more 'test-res' dirs), means we don't
have to override the gradle config, and makes it nicer to work in
IDEA 2016.1.
Add IRCDataInEvent that presents an IRCReader.ReadLine object rather than just the line of data.
This gives us access to MessageTags (#19) and pre-tokenised lines in DataIn rather than everything neededing to tokenise themselves.
There are probably a few other events we want to expose messagetags on that we still don't.
Try to keep track of channel keys (Close Issue #108)
- Parses outgoing JOINs to try and guess keys before we get the MODE reply.
- Parsing algorithm based on Quakenet/Hybrid handling of keys.
- Keys are swallowed from the key-list for EVERY channel that is
to join, even if it is not needed, so you would need to use
"JOIN #Foo,#Bar,#Baz Foo,,Baz" to join keyed channels #Foo and #Baz.
- Key changes by mode +k and -k will be tracked.
- Ignores attempts to set the key as "*" if we know a "better" key.
- Side effect: If the key is actually set to "*" we can only learn it if that
is what we join with, or it gets changed to that from no-key.
This release contains some performance improvements compared
to the version we were using.
Error handlers are now passed in at construction time, so
there was a small bit of refactoring required.
Assert that things aren't randomly null. This will make it easier
to fix than trying to hunt down obscure errors in the client caused
by nulls here.
Remove CallbackManager hacks.
Remove "non-critical" callbacks - if callers want to ignore the
exception they can just try/catch it.
Make addCallbackType private, and remove the unused delCallbackType
method.
All callbacks are now done through getCallback, which offers
type safety (gasp!) and is potentially extensible in the future
(wow!).
This means that nothing can depend on callbacks existing, so
there are two functional changes:
- the parser will no longer disconnect automatically on failed
pings; users have to listen for the event and handle it
themselves;
- the parser will no longer attempt to automatically use alt
nicknames or create new nicknames on connection; users have to
listen for the event and implement the logic themselves
Both of these were really weird anyway, as adding a listener (even
for debugging purposes) disabled the built-in behaviour.