From 4c969380b413e343bf760ee48d6f77eb2ace4836 Mon Sep 17 00:00:00 2001 From: clem1 Date: Sun, 6 Apr 2014 23:14:16 +0200 Subject: [PATCH] handlers: Arm a timer to get our nick back when it was already taken. --- client/handlers.go | 8 ++++++++ client/mocknetconn_test.go | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/client/handlers.go b/client/handlers.go index 028267b..4b3f936 100644 --- a/client/handlers.go +++ b/client/handlers.go @@ -6,6 +6,7 @@ package client import ( "github.com/fluffle/goevent/event" "strings" + "time" ) // Consts for unnamed events. @@ -99,6 +100,13 @@ func (conn *Conn) h_433(line *Line) { // Args[1] is the new nick we were attempting to acquire neu := conn.NewNick(line.Args[1]) conn.Nick(neu) + // arm a timer to try get back our nick. + go func(old string) { + retry := 1 * time.Minute + for time.Sleep(retry); conn.Me.Nick != old; time.Sleep(retry) { + conn.Nick(old) + } + }(line.Args[1]) // if this is happening before we're properly connected (i.e. the nick // we sent in the initial NICK command is in use) we will not receive // a NICK message to confirm our change of nick, so ReNick here... diff --git a/client/mocknetconn_test.go b/client/mocknetconn_test.go index 76835f9..992a41c 100644 --- a/client/mocknetconn_test.go +++ b/client/mocknetconn_test.go @@ -136,11 +136,11 @@ func (m *mockNetConn) Close() error { } func (m *mockNetConn) LocalAddr() net.Addr { - return &net.IPAddr{net.IPv4(127, 0, 0, 1)} + return &net.IPAddr{IP: net.IPv4(127, 0, 0, 1)} } func (m *mockNetConn) RemoteAddr() net.Addr { - return &net.IPAddr{net.IPv4(127, 0, 0, 1)} + return &net.IPAddr{IP: net.IPv4(127, 0, 0, 1)} } func (m *mockNetConn) SetDeadline(t time.Time) error {