读source code to learn GOLang

读source code to learn GOLang

Fold structure, as follows:


FOLDERS.png
Pasted Graphic 7.png
terminal_register.go.png
package main.png

/Users/mac/Downloads/Jt808-master/client_sample.go
package main // 定义包名

import (
. "Jt808/common"
"Jt808/service/handler"
"Jt808/tcp"
"fmt"
"github.com/vaughan0/go-ini" // can import url as lib
"io/ioutil"
"jt808"
"log"
"os"
"strconv"
"strings"
)

var GlobalCfg, _ = ini.LoadFile("conf/config.ini") // read config, _ means not deal the result.

func main() {
logger := log.Logger{}
//读配置文件
server, ok := GlobalCfg.Get("COMMON", "server") // <ok : > means if get success result ,if OK = TRue, sever has value ,else NULL.
if !ok {
fmt.Println("server ip/port not set")
return
}

_startImei, ok := GlobalCfg.Get("COMMON", "start_imei")
if !ok {
    fmt.Println("start imei not set")
    return
}
points, err := initRoute("conf/route.txt")
if err != nil {
    fmt.Printf("routes is not ok ")
    return
}
simpleTcpClinet := tcp.New(server, 1000)
// 生成一个模拟器
terminal := jt808.TerminalInfo{}
terminal.SetGpsInterval(10).SetHeartBeatInterval(180).SetImei(_startImei)
err = simpleTcpClinet.HandleService(handler.HandleJT808Msg).Set("device", terminal).Set("routes", &points).Use(&terminal).SetTimeout(1000).Dial()
if err != nil {
    logger.Println(err)
    return
}
simpleTcpClinet.Run()

}

func initRoute(filePath string) ([]Point, error) { //define func funname(parameters) (return <can be a tuple,or parameters>)
bytes, err := readAll(filePath)
if err != nil {
return nil, err
}

route := string(bytes)                         //将读入的字节转换成字符串
points := strings.Split(route, ";")            //将每组字符串以;标记分开
pos := make([]Point, len(points), len(points)) //定义一个pos切片
for index, po := range points {
    values := strings.Split(po, ",") //将每组数据    用,号分开之后存入values,
    //fmt.Println(len(values), index)
    if len(values) != 5 { //判断每组数据的个数,小于5个说明数据不完整,string类型
        fmt.Println("unknown format")
        continue
    }

    pos[index].Lon, _ = strconv.ParseFloat(values[0], 64)
    //pos[index].lat, _ = strconv.ParseFloat(values[1], 64)

    //fmt.Println(pos[index].lon)
    pos[index].Lat, _ = strconv.ParseFloat(values[1], 64)
    pos[index].Speed = 0

}
return pos, err

}
func readAll(filePath string) ([]byte, error) {
f, err := os.Open(filePath)
if err != nil {
return nil, err
}

return ioutil.ReadAll(f)

}

///Users/mac/Downloads/Jt808-master/vendor/jt808/consts/const.go

package Jtconsts // 定义包名

const ( //
Msg_Terminal_Register int = 0x0100 //终端注册
Msg_Terminal_Logout int = 0x0003 //终端注销
Msg_Terminal_Auth int = 0x0102 //终端鉴权
Msg_Terminal_Gps_Up int = 0x0200 //位置信息汇报
Msg_Terminal_Gps_Batch_Up int = 0x0704 //批量数据上传
Msg_Terminal_Heartbeat int = 0x0002 //批量数据上传
Msg_Terminal_Identifer byte = 0x7e // 标识符

// 平台通用应答
Cmd_Common_Resp int = 0x8001
// 终端注册应答
Cmd_Terminal_Tegister_Resp int = 0x8100
// 设置终端参数
Cmd_Terminal_Param_Settings int = 0X8103
// 查询终端参数
Cmd_Terminal_Param_Query int = 0x8104

)

// 定义一个结构体,并改变结构体的成员
package model

import (
"Jt808/utils"
"bytes"
)

type TerminalGpsBody struct {
warn_mark int
status int
lat float64
lon float64
high int
speed int
heading int
timestr string
}

func (t *TerminalGpsBody) SetLat(lat float64) *TerminalGpsBody {
t.lat = lat
return t
}
func (t *TerminalGpsBody) SetLon(lon float64) *TerminalGpsBody {
t.lon = lon
return t
}
func (t *TerminalGpsBody) SetWarnMark(warn int) *TerminalGpsBody {
t.warn_mark = warn
return t
}
func (t *TerminalGpsBody) SetStatus(status int) *TerminalGpsBody {
t.status = status
return t
}
func (t *TerminalGpsBody) SetHigh(hight int) *TerminalGpsBody {
t.high = hight
return t
}
func (t *TerminalGpsBody) SetHeading(heading int) *TerminalGpsBody {
t.heading = heading
return t
}
func (t *TerminalGpsBody) SetSpeed(speed int) *TerminalGpsBody {
t.speed = speed
return t
}
func (t *TerminalGpsBody) SetTime(timestr string) *TerminalGpsBody {
t.timestr = timestr
return t
}

// 结构体的方法
func (t *TerminalGpsBody) GetBytes() []byte {
var buff = bytes.Buffer{}
if len(t.timestr) < 12 {
return buff.Bytes()
}
buff.Write(utils.IntTo4byte(t.warn_mark))
buff.Write(utils.IntTo4byte(t.status))
buff.Write(utils.IntTo4byte(int(t.lat * 1000000)))
buff.Write(utils.IntTo4byte(int(t.lon * 1000000)))
buff.Write(utils.IntTo2byte(t.high))
buff.Write(utils.IntTo2byte(t.speed))
buff.Write(utils.IntTo2byte(t.heading))
buff.Write(utils.EncodeCBCDFromString(t.timestr))
return buff.Bytes()

}

、、、、

package model

import (
"encoding/hex"
"testing"
)

func TestTerminalGpsBody_GetBytes(t *testing.T) {
dev := &TerminalGpsBody{} // 声明一个结构体对象实体
dev.SetTime("170515162830")
t.Error(hex.EncodeToString(dev.GetBytes()))
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容