shithub: irc.myr

Download patch

ref: f78eb3deae2b86a923de513c134e98470c010017
parent: ce659df9bcc2fa571e9e1bb7ff7ed48c3f192b84
author: Ori Bernstein <ori@eigenstate.org>
date: Thu Jun 8 16:36:27 EDT 2017

Redial on disconnects.

--- a/irc.myr
+++ b/irc.myr
@@ -1,6 +1,7 @@
 use std
 use sys
 use bio
+use thread
 use termdraw
 
 pkg =
@@ -61,9 +62,31 @@
 		else
 			io(cli, fd)
 		;;
+		redial(cli)
 	;;
 }
 
+const redial = {cli
+	for s in cli.srv
+		if s.live
+			continue
+		;;
+		match std.dial(s.ds)
+		| `std.Ok fd:
+			s.fd = fd
+			if !handshake(cli, s)
+				std.close(s.fd)
+				continue
+			;;
+			s.live = true
+			for c in s.chan
+				send(cli, s, "JOIN {}\r\n", c.name)
+			;;
+		| `std.Err e:
+		;;
+	;;
+}
+
 const io = {cli, fd
 	var src, cmd, args
 	var srv, ln
@@ -103,8 +126,8 @@
 		| "353":	addnames(cli, srv, args)
 		| "366":	shownames(cli, [][:])
 		| "PRIVMSG":	recievemsg(cli, srv, src, args)
-		| "PING":	send(cli, srv, "PONG :{}\r\n", args[0])
-		| "JOIN":	joinchan(cli, srv, src, args, ln)
+		//| "PING":	send(cli, srv, "PONG :{}\r\n", args[0])
+		| "JOIN":	joined(cli, srv, src, args)
 		//| "PART":	joinchan(cli, srv, src, args, ln)
 		| c:	
 			status(cli, "unknown server command {}\n", ln)
@@ -114,7 +137,7 @@
 	;;
 }
 
-const joinchan = {cli, srv, src, args, ln
+const joined = {cli, srv, src, args
 	var c
 
 	if args.len == 1
@@ -545,6 +568,8 @@
 		cli.input = ""
 	| `termdraw.Kup:
 	| `termdraw.Kdown:
+	| `termdraw.Winsz _:
+		redraw(cli)
 	| r:
 		s = std.fmt("{}\n", r)
 		std.sljoin(&cli.self.buf, s)
--