Un poco inusual, pero oye, ¿por qué no? :)
El objetivo: escribir un demonio IRC en funcionamiento en el idioma de su elección que proporcione la funcionalidad básica, en la menor cantidad de caracteres posible. Mientras cumpla con los criterios a continuación, no tiene que cumplir completamente con los RFC de IRC (esto haría que el desafío sea significativamente menos divertido), solo necesita trabajar.
Requisitos:
- Los clientes deben poder conectarse en el puerto 6667 y usarlo. Al menos irssi y XChat deben poder conectarse con éxito con una configuración predeterminada.
- Los usuarios deben poder especificar su propio apodo, cambiarlo mientras ya están conectados, unirse a canales, abandonar canales y salir limpiamente (es decir
QUIT
). - Los canales deben crearse de manera normal: unirse a un canal sin usuarios en él lo 'crea'. No tienen que ser persistentes.
- Los usuarios deben poder enviar mensajes de canal y mensajes privados (es decir, a otros usuarios).
- El
WHOIS
comando debe ser implementada, así comoPING
/PONG
,LIST
yNAMES
(sobre todo con el fin de mantener a los clientes contentos).
Restricciones:
- No puede usar ninguna biblioteca de terceros (que incluye bibliotecas de E / S no centrales). Solo se permiten las bibliotecas estándar que vienen con la plataforma que usa.
- Si su implementación incluye soporte explícito para IRC en la biblioteca estándar, tampoco puede usarlo. La funcionalidad de red de la biblioteca estándar está, por supuesto, bien.
- Su envío debe poder ejecutarse de forma independiente. No ser inteligente con scripting mIRC :)
No es necesario implementar modos, patadas, etc. (a menos que sea necesario para que funcione con los clientes anteriores). SSL tampoco es necesario. Solo la funcionalidad básica anterior, para que el desafío sea corto y divertido.
Más información sobre qué es IRC aquí , los RFC son 1459 y 2812 (no puedo vincularlos directamente debido a mi falta de reputación). ¡La presentación más breve funcional y que cumpla con los requisitos gana!
Respuestas:
C ++ (parcialmente golfizado) 5655 (con CRLF contando para 1)
Esto se compila en VS 2013 (usa auto, lambdas y winsock) Parecía estar funcionando antes de jugarlo, así que a menos que lo arruine, aún debería estar bien. Una de las razones por las que es tan grande es que las respuestas numéricas que estoy devolviendo incluyen el texto especificado en el RFC; no sé si eso es necesario o no. Lo probé con KVirc porque funciona de forma portátil (¡no está permitido instalar software en mi PC!) Parece que KVirc funciona con mi servidor pero no sé de otros clientes: hice lo que pensé que decía el RFC, pero mucho está subespecificado, así que espero haberlo entendido bien.
El servidor maneja DIE, KILL, NICK, USER, MODE, WHOIS, WHO, JOIN, PART, TOPIC, LIST, NAMES, PRIVMSG, USERS, PING, PONG y QUIT en diversos grados. Para la mayoría de ellos, devuelvo las respuestas requeridas, incluida la mayoría de las comprobaciones necesarias para devolver las respuestas de error especificadas. Para algunos de ellos hago trampa:
Supongo que solo se juega golf parcialmente porque no soy muy bueno jugando al golf, así que si ves algo grande, edita la respuesta y arréglalo.
Aquí está la versión de golf.
Aquí está la versión en su mayoría sin golf (todavía usa algunas macros):
fuente