irrNetLite 2.1 [BETA]
Heh, I was just talking to my friend, who's life is networking tech and building unix clusters, about exactly this problem yesterday, and he suggested basically the exact same solution you just stated. (About the master server, and not actually running the physics on the client's computer.)
TheQuestion = 2B || !2B
indeed I am looking forward to it as well
My irrlicht-based projects have gone underground for now, but if you want, check out my webcomic instead! http://brokenboomerang.net
-
- Admin
- Posts: 3590
- Joined: Mon Oct 09, 2006 9:36 am
- Location: Scotland - gonnae no slag aff mah Engleesh
- Contact:
^^^^^^^^
He liiiiiiiives!
Good to see you back.
He liiiiiiiives!
Good to see you back.
Please upload candidate patches to the tracker.
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
Need help now? IRC to #irrlicht on irc.freenode.net
How To Ask Questions The Smart Way
Lol, buhatkj returns to the Irrlicht forums triumphantly after 8 months solitary training the in the Swiss alps.
ShadowMapping for Irrlicht!: Get it here
Need help? Come on the IRC!: #irrlicht on irc://irc.freenode.net
Need help? Come on the IRC!: #irrlicht on irc://irc.freenode.net
Ok since someone brought it up, the second version is pretty much complete, I've integrated ZLIB compression, AES encryption, onConnect/onDisconnect callbacks, kickClient functionality, and many other new features (Some of which I am wondering why they were missing in the first place).
I've also written 2 detailed examples and a tutorial, and I am still in the process of writing the 3rd example, not sure how many more examples I want to write for it, but I would like to showcase as much of the functionality as possible before I release.
I know, this was meant to be out aaaaages ago, but I am right in the middle of exams, I am very busy, I have (alot of) other commitments and I'm not super man so it's taken a lot longer than I expected.
Cheers
Edit: Henrique, I replied to your PM.
I've also written 2 detailed examples and a tutorial, and I am still in the process of writing the 3rd example, not sure how many more examples I want to write for it, but I would like to showcase as much of the functionality as possible before I release.
I know, this was meant to be out aaaaages ago, but I am right in the middle of exams, I am very busy, I have (alot of) other commitments and I'm not super man so it's taken a lot longer than I expected.
Cheers
Edit: Henrique, I replied to your PM.
ShadowMapping for Irrlicht!: Get it here
Need help? Come on the IRC!: #irrlicht on irc://irc.freenode.net
Need help? Come on the IRC!: #irrlicht on irc://irc.freenode.net
hmm
the status is irrNetLite2beta but its fn amazing stuff. thanks to BlindSide yet again (*cheers)
Your wish is my command, check main post Although this one has been tested, atleast a little.alexionne wrote:Even some untested beta will work
ShadowMapping for Irrlicht!: Get it here
Need help? Come on the IRC!: #irrlicht on irc://irc.freenode.net
Need help? Come on the IRC!: #irrlicht on irc://irc.freenode.net
Hey guys, sorry to revive an old topic, but can anyone help me with building irrNetLite with XCode?
Here's what I did so far:
- I downloaded the package
- Compiled eNet
- Compiled irrNetLite
- Created a new, empty project in XCode
- Added the frameworks AppKit, Cocoa, Carbon and OpenGL
- Added libenet.a, libirrnet.a and libirrlicht.a
- Created a new target, named it
- Added the frameworks and libraries to "Link with Binaries"
- Added Example1 to compile sources
-> Build
Since it didn't work, I tried with the new version of enet (1.2), but some functions signature changed, and I wasn't sure how to modify irrNetLite accordingly.
This is what I get with the current package:
Here's what I did so far:
- I downloaded the package
- Compiled eNet
- Compiled irrNetLite
- Created a new, empty project in XCode
- Added the frameworks AppKit, Cocoa, Carbon and OpenGL
- Added libenet.a, libirrnet.a and libirrlicht.a
- Created a new target, named it
- Added the frameworks and libraries to "Link with Binaries"
- Added Example1 to compile sources
-> Build
Since it didn't work, I tried with the new version of enet (1.2), but some functions signature changed, and I wasn't sure how to modify irrNetLite accordingly.
This is what I get with the current package:
Code: Select all
Building target “FirstNet” of project “FirstNet” with configuration “Debug” — (28 errors)
cd /Users/Guillaume/Desktop/FirstNet
/Developer/usr/bin/g++-4.0 -arch i386 -L/Users/Guillaume/Desktop/FirstNet/build/Debug -L/Users/Guillaume/Desktop/FirstNet -L/Users/Guillaume/Desktop/FirstNet/../IrrLicht/include -L/Users/Guillaume/Desktop/FirstNet/../irrNetLite/include -L/Users/Guillaume/Desktop/FirstNet/../irrNetLite/source/enet/include -F/Users/Guillaume/Desktop/FirstNet/build/Debug -filelist /Users/Guillaume/Desktop/FirstNet/build/FirstNet.build/Debug/FirstNet.build/Objects-normal/i386/FirstNet.LinkFileList -framework Carbon -lenet -lirrnet -lIrrlicht -framework AppKit -framework Carbon -framework Cocoa -framework OpenGL -o /Users/Guillaume/Desktop/FirstNet/build/Debug/FirstNet.app/Contents/MacOS/FirstNet
ld warning: in /Users/Guillaume/Desktop/FirstNet/libenet.a, file is not of required architecture
ld warning: irr::core::irrAllocator<char>::~irrAllocator()has different visibility (default) in /Users/Guillaume/Desktop/FirstNet/libirrnet.a(CNetManager.o) and (hidden) in /Users/Guillaume/Desktop/FirstNet/build/FirstNet.build/Debug/FirstNet.build/Objects-normal/i386/Example1.o
ld warning: irr::core::irrAllocator<char>::~irrAllocator()has different visibility (default) in /Users/Guillaume/Desktop/FirstNet/libirrnet.a(CNetManager.o) and (hidden) in /Users/Guillaume/Desktop/FirstNet/build/FirstNet.build/Debug/FirstNet.build/Objects-normal/i386/Example1.o
ld warning: irr::core::irrAllocator<char>::internal_delete(void*)has different visibility (default) in /Users/Guillaume/Desktop/FirstNet/libirrnet.a(CNetManager.o) and (hidden) in /Users/Guillaume/Desktop/FirstNet/build/FirstNet.build/Debug/FirstNet.build/Objects-normal/i386/Example1.o
ld warning: irr::core::irrAllocator<char>::internal_new(unsigned long)has different visibility (default) in /Users/Guillaume/Desktop/FirstNet/libirrnet.a(CNetManager.o) and (hidden) in /Users/Guillaume/Desktop/FirstNet/build/FirstNet.build/Debug/FirstNet.build/Objects-normal/i386/Example1.o
Undefined symbols:
"irr::net::SInPacket::operator>>(irr::core::string<char, irr::core::irrAllocator<char> >&)", referenced from:
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
"_enet_host_create", referenced from:
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::setUpServer(unsigned int)in libirrnet.a(CNetManager.o)
"_enet_host_connect", referenced from:
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
"_enet_deinitialize", referenced from:
irr::net::CNetManager::~CNetManager()in libirrnet.a(CNetManager.o)
irr::net::CNetManager::~CNetManager()in libirrnet.a(CNetManager.o)
"irr::net::SOutPacket::getSize()", referenced from:
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
"irr::net::SOutPacket::operator<<(char)", referenced from:
_main in Example1.o
_main in Example1.o
_main in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
"irr::net::SOutPacket::operator<<(char const*)", referenced from:
_main in Example1.o
"irr::net::SOutPacket::operator<<(float)", referenced from:
_main in Example1.o
_main in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
"irr::net::SInPacket::SInPacket(char const*, unsigned int)", referenced from:
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
"_enet_host_broadcast", referenced from:
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
"irr::net::SInPacket::operator>>(char&)", referenced from:
ClientNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
"irr::net::SInPacket::operator>>(float&)", referenced from:
ClientNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
ClientNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
"irr::net::SOutPacket::getData()", referenced from:
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
"_enet_initialize", referenced from:
irr::net::CNetManager::CNetManager(irr::net::INetCallback*, char const*, unsigned int, irr::net::SNetParams const&)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::CNetManager(irr::net::INetCallback*, unsigned int, irr::net::SNetParams const&)in libirrnet.a(CNetManager.o)
"_enet_host_service", referenced from:
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
"_enet_host_flush", referenced from:
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
"_enet_packet_destroy", referenced from:
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
"_enet_address_set_host", referenced from:
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
"irr::net::SInPacket::setPlayerId(unsigned short)", referenced from:
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
"_enet_peer_reset", referenced from:
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
"irr::net::SOutPacket::SOutPacket(char const*, unsigned int)", referenced from:
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
"irr::net::SInPacket::getPlayerId() const", referenced from:
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
"_enet_packet_create", referenced from:
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
"_enet_peer_disconnect_now", referenced from:
irr::net::CNetManager::kickClient(unsigned short, bool)in libirrnet.a(CNetManager.o)
"_enet_host_destroy", referenced from:
irr::net::CNetManager::~CNetManager()in libirrnet.a(CNetManager.o)
irr::net::CNetManager::~CNetManager()in libirrnet.a(CNetManager.o)
"_enet_peer_send", referenced from:
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
"irr::net::SOutPacket::SOutPacket()", referenced from:
_main in Example1.o
_main in Example1.o
_main in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
"_enet_peer_disconnect", referenced from:
irr::net::CNetManager::kickClient(unsigned short, bool)in libirrnet.a(CNetManager.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
"irr::net::SInPacket::operator>>(irr::core::string<char, irr::core::irrAllocator<char> >&)", referenced from:
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
"_enet_host_create", referenced from:
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::setUpServer(unsigned int)in libirrnet.a(CNetManager.o)
"_enet_host_connect", referenced from:
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
"_enet_deinitialize", referenced from:
irr::net::CNetManager::~CNetManager()in libirrnet.a(CNetManager.o)
irr::net::CNetManager::~CNetManager()in libirrnet.a(CNetManager.o)
"irr::net::SOutPacket::getSize()", referenced from:
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
"irr::net::SOutPacket::operator<<(char)", referenced from:
_main in Example1.o
_main in Example1.o
_main in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
"irr::net::SOutPacket::operator<<(char const*)", referenced from:
_main in Example1.o
"irr::net::SOutPacket::operator<<(float)", referenced from:
_main in Example1.o
_main in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
"irr::net::SInPacket::SInPacket(char const*, unsigned int)", referenced from:
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
"_enet_host_broadcast", referenced from:
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
"irr::net::SInPacket::operator>>(char&)", referenced from:
ClientNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
"irr::net::SInPacket::operator>>(float&)", referenced from:
ClientNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
ClientNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
"irr::net::SOutPacket::getData()", referenced from:
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
"_enet_initialize", referenced from:
irr::net::CNetManager::CNetManager(irr::net::INetCallback*, char const*, unsigned int, irr::net::SNetParams const&)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::CNetManager(irr::net::INetCallback*, unsigned int, irr::net::SNetParams const&)in libirrnet.a(CNetManager.o)
"_enet_host_service", referenced from:
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
"_enet_host_flush", referenced from:
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
"_enet_packet_destroy", referenced from:
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
"_enet_address_set_host", referenced from:
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
"irr::net::SInPacket::setPlayerId(unsigned short)", referenced from:
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
"_enet_peer_reset", referenced from:
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
"irr::net::SOutPacket::SOutPacket(char const*, unsigned int)", referenced from:
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
"irr::net::SInPacket::getPlayerId() const", referenced from:
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
"_enet_packet_create", referenced from:
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&) in libirrnet.a(CNetManager.o)
irr::net::CNetManager::setUpClient(char const*, unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
"_enet_peer_disconnect_now", referenced from:
irr::net::CNetManager::kickClient(unsigned short, bool)in libirrnet.a(CNetManager.o)
"_enet_host_destroy", referenced from:
irr::net::CNetManager::~CNetManager()in libirrnet.a(CNetManager.o)
irr::net::CNetManager::~CNetManager()in libirrnet.a(CNetManager.o)
"_enet_peer_send", referenced from:
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::update(unsigned int)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacket(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
irr::net::CNetManager::sendOutPacketUnreliable(irr::net::SOutPacket&, unsigned short)in libirrnet.a(CNetManager.o)
"irr::net::SOutPacket::SOutPacket()", referenced from:
_main in Example1.o
_main in Example1.o
_main in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
ServerNetCallback::handlePacket(irr::net::SInPacket&) in Example1.o
"_enet_peer_disconnect", referenced from:
irr::net::CNetManager::kickClient(unsigned short, bool)in libirrnet.a(CNetManager.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
Build failed (28 errors)
ga
wako use the 2 beta thats what new versions are there for. you should not have any problems getting it to go. its da bomb!
It's a linking issue, it really seems like the libs are not set up correctly. As I am inexperienced with OSX developement, I cannot really help you here.
Also look at this warning:
One thing you could try, that will get around all this sticky library business is not using libs at all, and just adding all the files from Enet and IrrNetLite directly into the project (Still use a lib for Irrlicht though!). That should work.
Also look at this warning:
It really seems the libs weren't built correctly, or on the same platform.ld warning: in /Users/Guillaume/Desktop/FirstNet/libenet.a, file is not of required architecture
One thing you could try, that will get around all this sticky library business is not using libs at all, and just adding all the files from Enet and IrrNetLite directly into the project (Still use a lib for Irrlicht though!). That should work.
ShadowMapping for Irrlicht!: Get it here
Need help? Come on the IRC!: #irrlicht on irc://irc.freenode.net
Need help? Come on the IRC!: #irrlicht on irc://irc.freenode.net