tcp server 用于给andriod 客户端定时发送消息
liuxiaolong
2020-07-28 646518fc259a9c14f1ba5baf2b7792021493caf2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package main
 
import (
    "andriodServer/controllers"
    "andriodServer/router"
    "flag"
    "fmt"
    "strconv"
    "time"
 
    "andriodServer/esutil"
    "andriodServer/extend/config"
    "andriodServer/log"
    "github.com/streadway/amqp"
)
 
var addr = flag.String("addr", "0.0.0.0", "The address to listen to")
var Eurl = flag.String("eurl", "http://192.168.20.10:9200/", "The port to listen on")
//var Picurl = flag.String("picurl", "http://58.118.225.79:41242/", "picture url")
 
var port = flag.Int("port", 6000, "The port to listen on")
var sec = flag.Int("sec", 10, "the second for query data")
 
var Level = flag.String("level","ErrorLevel","log level")
var IsHub = flag.String("hub", "hub", "hub is personIsHub=1")
var Size = flag.Int("size", 100, "size default is 100")
var env = flag.String("env", "config", "env set")
var mqIp = flag.String("mqIp", "192.168.20.10", "default mq ip")
var mqPort = flag.Int("mqPort", 5672, "default mq port")
var mqUser = flag.String("mqUser", "basic", "default rabbitmq user")
var mqPass = flag.String("mqPass", "basic", "default rabbitmq pass")
var confPath = flag.String("confPath", "/home/basic/Apps/go/AndroidAlarmServer/config/","default config path")
 
func main() {
    flag.Parse()
 
    log.SetLogLevel(*Level)
    config.Init(*env, *confPath)
    fmt.Println(*port)
 
    controllers.EsUrl = *Eurl
 
    mqAddr := "amqp://" + *mqUser + ":" + *mqPass + "@" + *mqIp + ":" + strconv.Itoa(*mqPort)+"/"
 
    conn, err := amqp.Dial(mqAddr)
    if err != nil {
        log.Log.Infof("Failed to connect to RabbitMQ,err:",err)
        return
    }
    defer conn.Close()
 
    ch, err := conn.Channel()
    if err !=nil {
        log.Log.Infof("Failed to open a channel,err:",err)
        return
    }
    defer ch.Close()
 
    q, err := ch.QueueDeclare(
        "alarm2Android", // name
        false,   // durable
        false,   // delete when unused
        false,   // exclusive
        false,   // no-wait
        nil,     // arguments
    )
    if err !=nil {
        log.Log.Infof("Failed to declare a queue,err:",err)
        return
    }
    r := router.NewRouter()
    go r.Run("0.0.0.0:"+strconv.Itoa(*port))
    handleAlarmData2MQ(q, ch)
}
 
func handleAlarmData2MQ(queue amqp.Queue,ch *amqp.Channel) {
    tick := time.NewTicker(3 * time.Second)
    lastTime := time.Now()
    for {
        select {
        case <-tick.C:
            curTime := time.Now()
            alarmData := esutil.PostAction(*sec, *Eurl, *IsHub, *Size, lastTime, curTime)
            if alarmData != nil {
                err := ch.Publish(
                    "",
                    queue.Name,
                    false,
                    false,
                    amqp.Publishing{
                        ContentType: "text/plain",
                        Body: alarmData,
                    })
                if err !=nil {
                    log.Log.Infof("send to mq err:"+err.Error())
                } else {
                    log.Log.Infof("send to mq success,msg:   "+string(alarmData))
                }
            }
            lastTime = curTime
        }
    }
}