-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathmessage.go
99 lines (82 loc) · 2.55 KB
/
message.go
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
package main
import (
"fmt"
"regexp"
"github.com/lmatte7/gomesh/github.com/meshtastic/gomeshproto"
"github.com/urfave/cli/v2"
)
func getReceivedMessages(c *cli.Context) error {
radio := getRadio(c)
defer radio.Close()
if !c.Bool("json") {
printMessageHeader()
}
for {
responses, err := radio.ReadResponse(false)
if err != nil {
return cli.Exit(err.Error(), 0)
}
receivedMessages := []*gomeshproto.FromRadio_Packet{}
for _, response := range responses {
if packet, ok := response.GetPayloadVariant().(*gomeshproto.FromRadio_Packet); ok {
if packet.Packet.GetDecoded().GetPortnum() == gomeshproto.PortNum_TEXT_MESSAGE_APP {
receivedMessages = append(receivedMessages, packet)
}
}
}
if len(receivedMessages) > 0 {
if c.Bool("json") {
printJsonMessages(receivedMessages)
} else {
printMessages(receivedMessages)
}
if c.Bool("exit") {
return nil
}
}
}
}
func sendText(c *cli.Context) error {
radio := getRadio(c)
defer radio.Close()
err := radio.SendTextMessage(c.String("message"), c.Int64("to"), c.Int64("channel"))
if err != nil {
return cli.Exit(err, 0)
}
return nil
}
func printMessageHeader() {
fmt.Printf("\n")
fmt.Printf("Received Messages:\n")
printDoubleDivider()
fmt.Printf("| %-15s| ", "From")
fmt.Printf("%-15s| ", "To")
fmt.Printf("%-18s| ", "Port Num")
fmt.Printf("%-10s| ", "Channel")
fmt.Printf("%-15s ", "Payload |\n")
printSingleDivider()
}
func printMessages(messages []*gomeshproto.FromRadio_Packet) {
for _, message := range messages {
fmt.Printf("| %-15s| ", fmt.Sprint(message.Packet.From))
fmt.Printf("%-15s| ", fmt.Sprint(message.Packet.To))
fmt.Printf("%-18s| ", message.Packet.GetDecoded().GetPortnum().String())
fmt.Printf("%-10s| ", fmt.Sprint(message.Packet.Channel))
re := regexp.MustCompile(`\r?\n`)
escMesg := re.ReplaceAllString(string(message.Packet.GetDecoded().Payload), "")
fmt.Printf("%-53q", escMesg)
fmt.Printf("%s", "|\n")
}
}
func printJsonMessages(messages []*gomeshproto.FromRadio_Packet) {
for _, message := range messages {
fmt.Printf("{\"from\":%s,", fmt.Sprint(message.Packet.From))
fmt.Printf("\"to\":%s,", fmt.Sprint(message.Packet.To))
fmt.Printf("\"portnum\": \"%s\",", message.Packet.GetDecoded().GetPortnum().String())
fmt.Printf("\"channel\":%s,", fmt.Sprint(message.Packet.Channel))
re := regexp.MustCompile(`\r?\n`)
escMesg := re.ReplaceAllString(string(message.Packet.GetDecoded().Payload), "")
fmt.Printf("\"Payload\": \"%s\"", escMesg)
fmt.Printf("%s", "}\n")
}
}