func (self *PiAssistant) StartService() { for _, serviceConfi := range self.piAssiConf.ServicesConfig { if serviceConfi.Autostart { service := self.ServiceMgr.GetService(serviceConfi.ServiceId) if service != nil { startErr := service.StartService() if startErr != nil { l4g.Error("%s service start error: %v", service.GetServiceId(), startErr) return } l4g.Info("%s start successful!", service.GetServiceId()) } } } l4g.Info("Start services successful!") // connect xmpp server connectError := self.connectXmppServer() if connectError != nil { l4g.Error("Connect xmpp server error: %v", connectError) return } l4g.Info("Xmpp is connected!") self.connErrorHandler = xmpp.NewConnErrorHandler() self.xmppClient.AddHandler(self.connErrorHandler) self.chathandler = xmpp.NewChatHandler() self.xmppClient.AddHandler(self.chathandler) self.subscribeHandler = xmpp.NewSubscribeHandler() self.xmppClient.AddHandler(self.subscribeHandler) //make sure will receive roster and subscribe message self.xmppClient.RequestRoster() //make resource available self.xmppClient.Send(&xmpp.Presence{}) stopService := false for !stopService { select { case connEvent := <-self.connErrorHandler.GetEventCh(): self.handleConnErr(connEvent) case event := <-self.chathandler.GetEventCh(): self.handle(event.Stanza.(*xmpp.Message)) case subsEvent := <-self.subscribeHandler.GetEventCh(): self.handleSubscribe(subsEvent.Stanza.(*xmpp.Presence)) case pushMsg := <-self.pushMsgCh: self.handlePushMsg(pushMsg) case <-self.stopCh: stopService = true } } }
func (self *PiAssistant) initServices() error { for _, serviceConfi := range self.piAssiConf.ServicesConfig { if serviceConfi.Autostart { service := self.ServiceMgr.GetService(serviceConfi.ServiceId) if service != nil { initErr := service.Init(serviceConfi.ConfigRaw, self.pushMsgCh) if initErr != nil { return errors.New(fmt.Sprintf("%s init error: %v", service.GetServiceId(), initErr)) } l4g.Info("%s initialize successful!", service.GetServiceId()) } } } return nil }