leaf游戏服务器模块源码-module

来源:互联网 发布:钢管舞教学视频软件 编辑:程序博客网 时间:2024/06/05 14:16

原文链接

leaf模块

  1. package leaf

  2. import (
  3.         "github.com/name5566/leaf/cluster"
  4.         "github.com/name5566/leaf/conf"
  5.         "github.com/name5566/leaf/console"
  6.         "github.com/name5566/leaf/log"
  7.         "github.com/name5566/leaf/module"
  8.         "os"
  9.         "os/signal"
  10. )

  11. func Run(mods ...module.Module) {
  12.         // logger
  13.         if conf.LogLevel != "" {
  14.                 logger, err := log.New(conf.LogLevel, conf.LogPath, conf.LogFlag)
  15.                 if err != nil {
  16.                         panic(err)
  17.                 }
  18.                 log.Export(logger)
  19.                 defer logger.Close()
  20.         }

  21.         log.Release("Leaf %v starting up", version)

  22.         // module
  23.         for i := 0; i < len(mods); i++ {
  24.                 module.Register(mods[i])
  25.         }
  26.         module.Init()

  27.         // cluster
  28.         cluster.Init()

  29.         // console
  30.         console.Init()

  31.         // close
  32.         c := make(chan os.Signal, 1)
  33.         signal.Notify(c, os.Interrupt, os.Kill)
  34.         sig := <-c
  35.         log.Release("Leaf closing down (signal: %v)", sig)
  36.         console.Destroy()
  37.         cluster.Destroy()
  38.         module.Destroy()
  39. }
复制代码
main()模块调用
  1. func main() {
  2.         lconf.LogLevel = conf.Server.LogLevel
  3.         lconf.LogPath = conf.Server.LogPath
  4.         lconf.LogFlag = conf.LogFlag
  5.         lconf.ConsolePort = conf.Server.ConsolePort
  6.         lconf.ProfilePath = conf.Server.ProfilePath

  7.         leaf.Run(
  8.                 game.Module,
  9.                 gate.Module,
  10.                 login.Module,
  11.         )
  12. }
复制代码
  1. package module

  2. import (
  3.         "github.com/name5566/leaf/conf"
  4.         "github.com/name5566/leaf/log"
  5.         "runtime"
  6.         "sync"
  7. )

  8. type Module interface {
  9.         OnInit()
  10.         OnDestroy()
  11.         Run(closeSig chan bool)
  12. }

  13. type module struct {
  14.         mi       Module
  15.         closeSig chan bool
  16.         wg       sync.WaitGroup
  17. }

  18. var mods []*module

  19. func Register(mi Module) {
  20.         m := new(module)
  21.         m.mi = mi
  22.         m.closeSig = make(chan bool, 1)

  23.         mods = append(mods, m)
  24. }

  25. func Init() {
  26.         for i := 0; i < len(mods); i++ {
  27.                 mods[i].mi.OnInit()
  28.         }

  29.         for i := 0; i < len(mods); i++ {
  30.                 m := mods[i]
  31.                 m.wg.Add(1)
  32.                 go run(m)
  33.         }
  34. }

  35. func Destroy() {
  36.         for i := len(mods) - 1; i >= 0; i-- {
  37.                 m := mods[i]
  38.                 m.closeSig <- true
  39.                 m.wg.Wait()
  40.                 destroy(m)
  41.         }
  42. }

  43. func run(m *module) {
  44.         m.mi.Run(m.closeSig)
  45.         m.wg.Done()
  46. }

  47. func destroy(m *module) {
  48.         defer func() {
  49.                 if r := recover(); r != nil {
  50.                         if conf.LenStackBuf > 0 {
  51.                                 buf := make([]byte, conf.LenStackBuf)
  52.                                 l := runtime.Stack(buf, false)
  53.                                 log.Error("%v: %s", r, buf[:l])
  54.                         } else {
  55.                                 log.Error("%v", r)
  56.                         }
  57.                 }
  58.         }()

  59.         m.mi.OnDestroy()
  60. }
复制代码
原创粉丝点击