func (s *Skeleton) Run(closeSig chan bool) { for { select { case <-closeSig: s.commandServer.Close() s.server.Close() s.g.Close() return case ci := <-s.server.ChanCall: err := s.server.Exec(ci) if err != nil { log.Error("%v", err) } case ci := <-s.commandServer.ChanCall: err := s.commandServer.Exec(ci) if err != nil { log.Error("%v", err) } case cb := <-s.g.ChanCb: s.g.Cb(cb) case t := <-s.dispatcher.ChanTimer: t.Cb() } } }
func (a *agent) WriteMsg(msg interface{}) { if a.gate.JSONProcessor != nil { // json data, err := a.gate.JSONProcessor.Marshal(msg) if err != nil { log.Error("marshal json %v error: %v", reflect.TypeOf(msg), err) return } if a.wsConn != nil { a.wsConn.WriteMsg(data) } else if a.tcpConn != nil { a.tcpConn.WriteMsg(data) } } else if a.gate.ProtobufProcessor != nil { // protobuf id, data, err := a.gate.ProtobufProcessor.Marshal(msg.(proto.Message)) if err != nil { log.Error("marshal protobuf %v error: %v", reflect.TypeOf(msg), err) return } if a.wsConn != nil { b := make([]byte, len(id)+len(data)) copy(b, id) copy(b[len(id):], data) a.wsConn.WriteMsg(b) } else if a.tcpConn != nil { a.tcpConn.WriteMsg(id, data) } } }
func (c *LinearContext) Go(f func(), cb func()) { c.g.pendingGo++ c.mutexLinearGo.Lock() c.linearGo.PushBack(&LinearGo{f: f, cb: cb}) c.mutexLinearGo.Unlock() go func() { c.mutexExecution.Lock() defer c.mutexExecution.Unlock() c.mutexLinearGo.Lock() e := c.linearGo.Remove(c.linearGo.Front()).(*LinearGo) c.mutexLinearGo.Unlock() defer func() { c.g.ChanCb <- e.cb if r := recover(); r != nil { if conf.LenStackBuf > 0 { buf := make([]byte, conf.LenStackBuf) l := runtime.Stack(buf, false) log.Error("%v: %s", r, buf[:l]) } else { log.Error("%v", r) } } }() e.f() }() }
func destroy(m *module) { defer func() { if r := recover(); r != nil { if conf.LenStackBuf > 0 { buf := make([]byte, conf.LenStackBuf) l := runtime.Stack(buf, false) log.Error("%v: %s", r, buf[:l]) } else { log.Error("%v", r) } } }() m.mi.OnDestroy() }
func (a *agent) OnClose() { if a.gate.AgentChanRPC != nil { err := a.gate.AgentChanRPC.Open(0).Call0("CloseAgent", a) if err != nil { log.Error("chanrpc error: %v", err) } } }
func (g *Go) Cb(cb func()) { defer func() { g.pendingGo-- if r := recover(); r != nil { if conf.LenStackBuf > 0 { buf := make([]byte, conf.LenStackBuf) l := runtime.Stack(buf, false) log.Error("%v: %s", r, buf[:l]) } else { log.Error("%v", r) } } }() if cb != nil { cb() } }
func (t *Timer) Cb() { defer func() { t.cb = nil if r := recover(); r != nil { if conf.LenStackBuf > 0 { buf := make([]byte, conf.LenStackBuf) l := runtime.Stack(buf, false) log.Error("%v: %s", r, buf[:l]) } else { log.Error("%v", r) } } }() if t.cb != nil { t.cb() } }
// goroutine safe func (c *DialContext) Close() { c.Lock() for _, s := range c.sessions { s.Close() if s.ref != 0 { log.Error("session ref = %v", s.ref) } } c.Unlock() }
func (g *Go) Go(f func(), cb func()) { g.pendingGo++ go func() { defer func() { g.ChanCb <- cb if r := recover(); r != nil { if conf.LenStackBuf > 0 { buf := make([]byte, conf.LenStackBuf) l := runtime.Stack(buf, false) log.Error("%v: %s", r, buf[:l]) } else { log.Error("%v", r) } } }() f() }() }
func Example() { name := "Leaf" log.Debug("My name is %v", name) log.Release("My name is %v", name) log.Error("My name is %v", name) // log.Fatal("My name is %v", name) logger, err := log.New("release", "") if err != nil { return } defer logger.Close() logger.Debug("will not print") logger.Release("My name is %v", name) log.Export(logger) log.Debug("will not print") log.Release("My name is %v", name) }