Dependencies:

Dependent shards (5)

Development dependencies:

Owner:

fast_irc.cr

An optimised IRC parsing library for crystal. Supports IRCv3 message tags. Getting started is as easy as FastIRC.parse(io) do |message|.

Fast_irc doesn't attempt to deal with the semantics of IRC messages. Messages are simply parsed into a machine-readable format and delivered to the user.

Performance

Here fast_irc was tested parsing a 63748 byte IRC log file collected from real IRC activity on the esper.net IRC network. Fast_irc's performance on a single core averaged over 150MB/s, taking only 740 nanoseconds to parse a single line.

In terms of memory performance, a single 8192 byte buffer is allocated per connection. All string values in the IRC prefix, the IRC command, and IRCv3 tag keys are interned in a global string pool to save memory. IRCv3 message tag values and IRC command parameters are not interned.

Installation

Add it to shard.yml

dependencies:
fast_irc:
github: RX14/fast_irc.cr
version: 0.3.3

Docs

Build the documentation by cloning this repo and running crystal doc. HTML documentation will be placed in doc/.

Usage

It's easy to get started parsing IRC connections right away using fast_irc. Just pass an IO (likely a TCP connection to an IRC server) to FastIRC.parse. Message objects are yielded as they arrive on the connection. For a non-block way to read messages, see FastIRC::Reader.

Generating IRC is just as easy. Create your Message object and call to_s.

FastIRC::Message.new("PRIVMSG", ["#WAMM", "test message"]).to_s(io)

You can also add IRCv3 tags and a prefix. FastIRC::Tags is simply an alias for Hash(String, String?). It is recommended to use the FastIRC::Tags alias when creating tags hashes both to clear intent, and to make sure that you don't end up with a Hash(String, String) instead, which is a binary-incompatible type.