This commit is contained in:
tj 2010-10-11 21:17:59 +02:00
commit f69d3c8182
3 changed files with 41 additions and 18 deletions

View File

@ -1,8 +1,4 @@
<<<<<<< HEAD:Makefile
include $(GOROOT)/src/Make.inc include $(GOROOT)/src/Make.inc
=======
include $(GOROOT)/src/Make.${GOARCH}
>>>>>>> 6f3c572eae2c00aaaf57248b767adf74b571ed01:Makefile
TARG=irc TARG=irc
GOFILES=irc.go irc_struct.go irc_callback.go GOFILES=irc.go irc_struct.go irc_callback.go

View File

@ -1,9 +1,10 @@
package main package main
import ( import (
irc "github.com/thoj/Go-IRC-Client-Library" // irc "github.com/thoj/Go-IRC-Client-Library"
"fmt" "fmt"
"os" "os"
"irc"
) )
func main() { func main() {
@ -14,6 +15,17 @@ func main() {
fmt.Printf("%#v\n", irccon) fmt.Printf("%#v\n", irccon)
os.Exit(1) os.Exit(1)
} }
irccon.AddCallback("001", func(e *irc.IRCEvent) { irccon.Join("#testgo") }) irccon.AddCallback("001", func(e *irc.IRCEvent) { irccon.Join("#testgo1") })
irccon.Loop(); irccon.AddCallback("001", func(e *irc.IRCEvent) { irccon.Join("#testgo2") })
irccon.AddCallback("001", func(e *irc.IRCEvent) { irccon.Join("#testgo3") })
irccon.AddCallback("001", func(e *irc.IRCEvent) { irccon.Join("#testgo4") })
irccon.AddCallback("001", func(e *irc.IRCEvent) { irccon.Join("#testgo5") })
irccon.AddCallback("001", func(e *irc.IRCEvent) { irccon.Join("#testgo6") })
irccon.ReplaceCallback("001", 0, func(e *irc.IRCEvent) { irccon.Join("#testgo01") })
irccon.ReplaceCallback("001", 1, func(e *irc.IRCEvent) { irccon.Join("#testgo02") })
irccon.ReplaceCallback("001", 2, func(e *irc.IRCEvent) { irccon.Join("#testgo03") })
irccon.ReplaceCallback("001", 3, func(e *irc.IRCEvent) { irccon.Join("#testgo04") })
irccon.ReplaceCallback("001", 4, func(e *irc.IRCEvent) { irccon.Join("#testgo05") })
irccon.ReplaceCallback("001", 6, func(e *irc.IRCEvent) { irccon.Join("#testgo06") })
irccon.Loop()
} }

View File

@ -7,29 +7,44 @@ import (
"strconv" "strconv"
) )
func AppendCallback(slice, data []func(*IRCEvent)) []func(*IRCEvent) {
l := len(slice)
if l+len(data) > cap(slice) {
newSlice := make([]func(*IRCEvent), (l+len(data))*2)
copy(newSlice, slice)
slice = newSlice
}
slice = slice[0 : l+len(data)]
for i, c := range data {
slice[l+i] = c
}
return slice
}
func (irc *IRCConnection) AddCallback(eventcode string, callback func(*IRCEvent)) { func (irc *IRCConnection) AddCallback(eventcode string, callback func(*IRCEvent)) {
eventcode = strings.ToUpper(eventcode) eventcode = strings.ToUpper(eventcode)
if event, ok := irc.events[eventcode]; ok { if event, ok := irc.events[eventcode]; ok {
// TODO: Grow this dynamically newevent := make([]func(*IRCEvent), 1)
event = event[0 : len(event)+1] newevent[0] = callback
event[len(event)-1] = callback irc.events[eventcode] = AppendCallback(event, newevent)
} else { } else {
event = make([]func(*IRCEvent), 1, 20) event = make([]func(*IRCEvent), 1)
event[0] = callback event[0] = callback
irc.events[eventcode] = event irc.events[eventcode] = event
} }
} }
func (irc *IRCConnection) ReplaceCallback(eventcode string, i uint8, callback func(*IRCEvent)) { func (irc *IRCConnection) ReplaceCallback(eventcode string, i int, callback func(*IRCEvent)) {
eventcode = strings.ToUpper(eventcode) eventcode = strings.ToUpper(eventcode)
if event, ok := irc.events[eventcode]; ok { if event, ok := irc.events[eventcode]; ok {
if i < len(event) {
event[i] = callback event[i] = callback
} else { return
event = make([]func(*IRCEvent), 1, 20)
event[0] = callback
irc.events[eventcode] = event
} }
fmt.Printf("Event found, but no callback found at index %d. Use AddCallback\n", i)
return
}
fmt.Printf("Event not found. Use AddCallBack\n")
} }
func (irc *IRCConnection) RunCallbacks(event *IRCEvent) { func (irc *IRCConnection) RunCallbacks(event *IRCEvent) {
@ -92,7 +107,7 @@ func (irc *IRCConnection) setupCallbacks() {
irc.AddCallback("433", func(e *IRCEvent) { irc.AddCallback("433", func(e *IRCEvent) {
if len(irc.nick) > 8 { if len(irc.nick) > 8 {
irc.nick = "_" + irc.nick; irc.nick = "_" + irc.nick
} else { } else {
irc.nick = irc.nick + "_" irc.nick = irc.nick + "_"
} }