diff --git a/client.go b/client.go index 3d6642c..e3769f3 100644 --- a/client.go +++ b/client.go @@ -9,11 +9,14 @@ import ( var connc net.Conn var clientSign map[string]chan string +var clientStopSign chan int func init() { + clientStopSign = make(chan int) clientSign = make(map[string]chan string) } +// Notify 用于获取一个通知 func Notify(key string) chan string { if _, ok := clientSign[key]; !ok { ch := make(chan string, 5) @@ -32,6 +35,7 @@ func store(key, value string) { clientSign[key] <- value } +// NewNotifyC 用于新建一个Client端进程 func NewNotifyC(netype, value string) error { var err error connc, err = net.Dial(netype, value) @@ -41,6 +45,12 @@ func NewNotifyC(netype, value string) error { go cnotify() go func() { for { + select { + case <-clientStopSign: + connc.Close() + break + default: + } buf := make([]byte, 8192) n, err := connc.Read(buf) Queue.ParseMessage(buf[0:n], connc) @@ -55,6 +65,7 @@ func NewNotifyC(netype, value string) error { return nil } +// Send 用于向Server端发送数据 func Send(name string) error { _, err := connc.Write(Queue.BuildMessage(name)) return err @@ -63,6 +74,8 @@ func Send(name string) error { func cnotify() { for { select { + case <-clientStopSign: + break case <-notifychan: break default: @@ -79,3 +92,8 @@ func cnotify() { go store(strs[0], strs[1]) } } + +// ClientStop 终止client端运行 +func ClientStop() { + clientStopSign <- 0 +} diff --git a/server.go b/server.go index b69a839..abebe37 100644 --- a/server.go +++ b/server.go @@ -1,3 +1,4 @@ +// Package notify is a package which provide common tcp/udp/unix socket service package notify import ( @@ -7,18 +8,23 @@ import ( "b612.me/starainrt" ) +// Queue 是用来处理收发信息的简单消息队列 var Queue *starainrt.StarQueue + +// FuncLists 记录了被通知项所记录的函数 var FuncLists map[string]func(NetMsg) string var serverStopSign chan int var notifychan chan int +// NetMsg 指明当前被通知的关键字 type NetMsg struct { Conn net.Conn key string } -func (this *NetMsg) Send(msg string) error { - _, err := this.Conn.Write(Queue.BuildMessage(this.key + "||" + msg)) +// Send 用于向client端发送数据 +func (nmsg *NetMsg) Send(msg string) error { + _, err := nmsg.Conn.Write(Queue.BuildMessage(nmsg.key + "||" + msg)) return err } @@ -27,6 +33,8 @@ func init() { Queue = starainrt.NewQueue() FuncLists = make(map[string]func(NetMsg) string) } + +// NewNotifyS 开启一个新的Server端通知 func NewNotifyS(netype, value string) error { listener, err := net.Listen(netype, value) if err == nil { @@ -67,6 +75,7 @@ func NewNotifyS(netype, value string) error { return err } +// SetNotify 用于设置通知关键词和调用函数 func SetNotify(name string, data func(NetMsg) string) { FuncLists[name] = data } @@ -96,6 +105,7 @@ func notify() { } } +// ServerStop 用于终止Server端运行 func ServerStop() { serverStopSign <- 0 }