https://github.com/fredrikaugust/crier
Partial erlang implementation of the IRC protocol
https://github.com/fredrikaugust/crier
erlang irc irc-protocol irc-server
Last synced: 11 months ago
JSON representation
Partial erlang implementation of the IRC protocol
- Host: GitHub
- URL: https://github.com/fredrikaugust/crier
- Owner: FredrikAugust
- License: apache-2.0
- Created: 2017-10-15T21:42:00.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2017-10-20T11:41:31.000Z (over 8 years ago)
- Last Synced: 2025-06-10T04:03:53.820Z (about 1 year ago)
- Topics: erlang, irc, irc-protocol, irc-server
- Language: Erlang
- Homepage:
- Size: 56.6 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
crier
=====
**IMPORTANT NOTE:**
This was not supposed to evolve into the next official IRC protocol implementation
or anything like that. This was meant to be a _fun_ way for me to learn erlang, and
truth be told, it was quite fun.
Though, as it was my first interaction with IRC (except for usage), the code in
here is an unholy mashup of anti-patterns in erlang. Worst case example; if you
spam for 2 seconds, every message will be delayed by about 2 seconds from the
previous one. Kind of like the anti-spam on the freenode network, except theirs
is intentional.
Feel free to do whatever you want with this code, as I probably won't be maintaining
it after it _works_.
**END IMPORTANT NOTE**
How this should have been done
------------------------------
- Have two different state managers for users and channels
- Don't throw all commands at one synchronous process, this is what created the enormous bottleneck we have now
- Keep as much as you can asynchronous, as this will spawn another process that doesn't lock up the process
- Make almost all IRC commands run asynchronously on the server; there is no reason for us to wait for a confirmation as to whether the message was sent or not. We can let the client handle this
- Rely more on the client for state management
- Pay more attention to data structure to avoid passing the entire state around to sync. processes
A partial implementation of the IRC protocol.
This is not meant to be used in production, but a project for me to learn more
about concurrency and the IRC protocol.
Usage
-----
$ rebar3 release
$ ./_build/default/rel/crier/bin/crier
Notes
-----
This will run the IRC server on `localhost/5000` (IRC format, `localhost:5000`).
Implementation status can partially be found in the `TODO.org` file, a more
detailed list will be added to this file later.