123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package tcp
-
- import (
- "os"
- "os/signal"
- "strings"
- "syscall"
- "time"
-
- "git.links123.net/links123.com/skeleton/cmd/tcp/router"
- "git.links123.net/links123.com/skeleton/service/store/cache"
- "git.links123.net/links123.com/skeleton/service/store/mysql"
- "github.com/sirupsen/logrus"
- "github.com/spf13/cobra"
- "github.com/wpajqz/linker"
- "github.com/wpajqz/linker/plugins"
- )
-
- // RunCommand cobra subcommand tcp
- func RunCommand() *cobra.Command {
- var host, port string
- cmd := &cobra.Command{
- Use: "tcp",
- Short: "Run the tcp service",
- Run: func(cmd *cobra.Command, args []string) {
- go Start(host, port)
- // 阻塞退出 捕获信号
- signalChan := make(chan os.Signal)
- signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
- logrus.Infof("caught signal %+v, begin garbage collection", <-signalChan)
- Stop()
- },
- }
-
- cmd.PersistentFlags().StringVarP(&host, "host", "o", "0.0.0.0", "server hostname")
- cmd.PersistentFlags().StringVarP(&port, "port", "p", "8081", "server port")
-
- return cmd
- }
-
- // Start use for cobra or testing
- func Start(host, port string) {
- // init db
- mysql.Init()
- // init cache
- cache.Init()
- // init server
- server := linker.NewServer(linker.Config{
- Timeout: 30 * time.Second,
- PluginForPacketSender: []linker.PacketPlugin{
- &plugins.Encryption{},
- &plugins.Debug{Sender: true},
- },
- PluginForPacketReceiver: []linker.PacketPlugin{
- &plugins.Decryption{},
- &plugins.Debug{Sender: false},
- },
- })
- // build router
- r := router.BuildRouter()
- server.BindRouter(r)
- // start server
- err := server.RunTCP("tcp", strings.Join([]string{host, port}, ":"))
- if err != nil {
- panic(err)
- }
- }
-
- // Stop stop the http service graceful
- func Stop() {
- // tcp server graceful shutdown missing
- cache.Close()
- mysql.Close()
- }
|