12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package comm
- import (
- "fmt"
- "net"
- )
- type QuitCtx map[string]interface{}
- type QuiteHandle func(ctx QuitCtx) bool
- var _quitCtx = make(map[string]interface{})
- var _listeners = []QuiteHandle{}
- func InitQuitCtx(ctx QuitCtx) {
- _quitCtx = ctx
- }
- func PushQuitHandle(handle QuiteHandle) {
- _listeners = append(_listeners, handle)
- }
- func onQuite() {
- t := len(_listeners)
- for i, h := range _listeners {
- isBreak := h(_quitCtx)
- fmt.Println("[quit] ", i, "/", t, "breaking next =>", isBreak)
- if isBreak {
- break
- }
- }
- }
- var QuitChan = make(chan int)
- func InitQuitSocket(port int) error {
- if port <= 0 {
- p, e := GetFreePort()
- if e != nil {
- return e
- }
- port = p
- }
- ln, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
- if err != nil {
- fmt.Println("listen tcp err", err)
- return err
- }
- fmt.Println("quitsokect=>", port)
- go func() {
- // defer ln.Close()
- conn, err := ln.Accept()
- if err != nil {
- fmt.Println("Accept error=>", err)
- ln.Close()
- return
- }
- defer conn.Close() //接收
- onQuite()
- message := "pong"
- _, err = conn.Write([]byte(message))
- if err != nil {
- fmt.Println("Error sending message:", err)
- }
- QuitChan <- 1
- }()
- return nil
- }
|