func main() { lconf.LogLevel = conf.Server.LogLevel lconf.LogPath = conf.Server.LogPath logger.GetLogger().Infof("prepare Run:") leaf.Run( game.Module, gate.Module, login.Module, ) logger.GetLogger().Infof("prepare Exit") }
//todo:warrior 实现 time.Receiver 接口,这样就可以得到时间片来进行行动了 func (self *Battle) Receive(ts dataStructure.TimeSpan) { fmt.Printf("Receive:[%v] ,status is: [%v]\n", ts, self.Status) switch self.Status { case STATUS_INIT: self.Start() fallthrough case STATUS_ING: // fmt.Printf("Receive actSeq:[%v]\n",self.ActSeq.Len()) //累加进行时间 self.Report.AddTimeConsumed(ts) /* 进行战斗: * 从行动队列里,取出行动顺序最高的角色,按照顺序分配动作时间片 */ for oneWarrior := self.ActSeq.List.Front(); oneWarrior != nil; oneWarrior = oneWarrior.Next() { w := oneWarrior.Value.(*Warrior) if w.Status != WARRIOR_DEAD { //对角色进行时间片输入 w.Receive(ts) } } //发射事件 func(目前为止总时间,本次流失时间) self.Emit(EVENT_TIME_ELAPSED, self.Report.TimeConsumed, ts) case STATUS_OVER: //如果战斗已经结束,还收到时间片,不做事情 // self.END() default: logger.GetLogger().Errorf("wrong status :%v", self.Status) } }
func Login(args []interface{}) { m := args[0].(*C2S.Login) a := args[1].(gate.Agent) //1个简单的登录逻辑验证,如果发送的accId不在配置文件配置的范围内,则登录失败 // if len(m.AccID) < gamedata.AccIDMin || len(m.AccID) > gamedata.AccIDMax { // a.WriteMsg(&msg.S2C_Auth{Err: msg.S2C_Auth_AccIDInvalid}) // return // } logger.GetLogger().Debugf("login prepare login: [%v]", m) // login game.ChanRPC.Go("UserLogin", m, a) logger.GetLogger().Debugf("login after send: [%v]", m) // a.WriteMsg(&msg.H{Err: msg.S2C_Auth_OK}) }
//时间源开始不断的工作,产生一片一片时间片,并顺着接收者管道派发下去 func (self *Source) Begin() { self.State = STATE_RUNNING logger := logger.GetLogger() tickCount := 0 //记录生成的时间片数量 printDuration := 10000 //每个多少次打印一下 //建立一个计时器,计时器的轮休时间,就是单位时间片 self.ticker = time.NewTicker(self.GameTimeUnit.RealSpan) // logger.Infof("已创建帧间隔为 %d ms的ticker,准备进入时间生成主循环",self.GameTimeUnit.RealSpan / 1000000) logger.Infof("已创建帧间隔为 %v 的ticker,准备进入时间生成主循环", self.GameTimeUnit.RealSpan) go func() { for _ = range self.ticker.C { tickCount++ if tickCount == printDuration { logger.Infof("已产生%v个时间片", tickCount) tickCount = 0 } for _, r := range self.Receivers { //分发给接受者 r.Receive(self.GameTimeUnit) } } }() }