func main() { if err := initialize(); err != nil { panic(fmt.Sprintf("initialize failed:%s\n", err.Error())) } //start server... server := network.NewServer() if server == nil { panic("new tcp server failed.") } go server.Start() //start rule updater updater := task.NewUpdater() if updater == nil { panic("new updater failed.") } go updater.Start() //start worker filters := make([]*task.Filter, common.WorkerNum) loggerf := common.NewLogger("filter") backends := make([]*network.Backend, common.WorkerNum) loggerb := common.NewLogger("backend") for i := 0; i < common.WorkerNum; i++ { filters[i] = task.NewFilter(i, common.PacketChans[i], common.FilterChans[i], loggerf) if filters[i] == nil { panic("new filter failed.") } go filters[i].Start() backends[i] = network.NewBackend(i, common.FilterChans[i], loggerb) if backends[i] == nil { panic("new backend failed.") } go backends[i].Start() } fmt.Printf("Program %s start success, wait for quit signal...\n", VERSION) //wait for signal sig_chan := make(chan os.Signal) signal.Notify(sig_chan, os.Interrupt, syscall.SIGTERM) <-sig_chan //clear works... server.Stop() updater.Stop() for i := 0; i < common.WorkerNum; i++ { filters[i].Stop() backends[i].Stop() } common.Alarm(VERSION + "-exit") time.Sleep(time.Second) fmt.Printf("Program %s quit success at: %s\n", VERSION, time.Now()) }
func main() { if err := initialize(); err != nil { fmt.Sprintf("init failed %s \n", err.Error()) } server := network.NewServer() if server == nil { panic("New tcp server failed") } fmt.Println("Server%s", server) go server.Start() backend := network.NewBackend(0, common.PacketChans[0]) if backend == nil { panic("New backend failed") } sig_chan := make(chan os.Signal) signal.Notify(sig_chan, os.Interrupt, syscall.SIGTERM) <-sig_chan }