Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
ficus_clientserver
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
yunpeng.song
ficus_clientserver
Commits
bb74bd03
Commit
bb74bd03
authored
Oct 23, 2019
by
yunpeng.song
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'release/v1.0.0.2'
parents
2aee66c9
90c8ecf0
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
96 additions
and
43 deletions
+96
-43
cfg.json
+4
-2
config/config.go
+2
-0
config/loadconfig.go
+18
-0
control/msgsend.go
+19
-1
main.go
+32
-3
model/client.go
+7
-3
nethandle/dispatchhandler.go
+2
-2
nethandle/thriftservice/devicedispatch.go
+9
-2
nethandle/thriftservice/messagedispatch.go
+3
-2
nethandle/thriftservice/packagehandler.go
+0
-28
No files found.
cfg.json
View file @
bb74bd03
...
@@ -5,8 +5,10 @@
...
@@ -5,8 +5,10 @@
"privateIp"
:
"172.16.1.133"
,
"privateIp"
:
"172.16.1.133"
,
"pulicIp"
:
"172.16.1.133"
,
"pulicIp"
:
"172.16.1.133"
,
"logpath"
:
"f:
\\
log
\\
ficusSchedule"
,
"logpath"
:
"f:
\\
log
\\
ficusSchedule"
,
"deviceurl"
:
"172.16.1.288"
,
"deviceurl"
:
"172.16.1.228"
,
"deviceport"
:
"9099"
"deviceport"
:
"9099"
,
"retrytime"
:
1000
,
"retrytimes"
:
3
},
},
"prefix"
:
{
"prefix"
:
{
"msgname"
:
"msg"
,
"msgname"
:
"msg"
,
...
...
config/config.go
View file @
bb74bd03
...
@@ -15,6 +15,8 @@ type (
...
@@ -15,6 +15,8 @@ type (
Logpath
string
`json:"logpath"`
// 日志地址
Logpath
string
`json:"logpath"`
// 日志地址
Deviceurl
string
`json:"deviceurl"`
Deviceurl
string
`json:"deviceurl"`
Deviceport
string
`json:"deviceport"`
Deviceport
string
`json:"deviceport"`
RetryTime
int
`json:"retrytime"`
//请求重试间隔时间
RetryTimes
int
`json:"retrytimes"`
//请求重试次数
}
}
RedisKey
struct
{
RedisKey
struct
{
...
...
config/loadconfig.go
View file @
bb74bd03
...
@@ -9,6 +9,7 @@ import (
...
@@ -9,6 +9,7 @@ import (
"os"
"os"
"os/exec"
"os/exec"
"strings"
"strings"
"time"
)
)
const
CONFIG_CONFIGNAME
=
"cfg.json"
const
CONFIG_CONFIGNAME
=
"cfg.json"
...
@@ -173,3 +174,20 @@ func GetCallBackServerAddress(server string) (string, error) {
...
@@ -173,3 +174,20 @@ func GetCallBackServerAddress(server string) (string, error) {
}
}
return
address
.
(
string
),
nil
return
address
.
(
string
),
nil
}
}
func
GetRetryTime
()
time
.
Duration
{
t
:=
AppCfg
.
RetryTime
if
t
==
0
{
t
=
1000
}
rt
:=
time
.
Duration
(
int64
(
t
))
return
rt
}
func
GetRetryTimes
()
int
{
times
:=
AppCfg
.
RetryTimes
if
times
==
0
{
times
=
3
}
return
times
}
control/msgsend.go
View file @
bb74bd03
...
@@ -2,8 +2,11 @@ package control
...
@@ -2,8 +2,11 @@ package control
import
(
import
(
"ficus/mission"
"ficus/mission"
"ficus/proto"
"ficus_clientserver/config"
"ficus_clientserver/model"
"ficus_clientserver/model"
"ficus_clientserver/nethandle/thriftservice"
"ficus_clientserver/nethandle/thriftservice"
"ficus_clientserver/tool"
"time"
"time"
log
"github.com/sirupsen/logrus"
log
"github.com/sirupsen/logrus"
...
@@ -87,12 +90,27 @@ func (p *MsgSender) WriteMsgToSendChan(msg *model.Msg) {
...
@@ -87,12 +90,27 @@ func (p *MsgSender) WriteMsgToSendChan(msg *model.Msg) {
func
(
p
*
MsgSender
)
AddMsgTries
(
msg
*
model
.
Msg
)
bool
{
func
(
p
*
MsgSender
)
AddMsgTries
(
msg
*
model
.
Msg
)
bool
{
if
msg
.
TriesAddOne
()
{
if
msg
.
TriesAddOne
()
{
log
.
Info
(
"已经达到最大尝试次数"
,
msg
.
MsgId
)
log
.
Info
(
"已经达到最大尝试次数"
,
msg
.
MsgId
)
p
.
msgControl
.
DeleteMsg
(
msg
.
MsgId
)
go
p
.
MsgFeedBack
(
msg
)
return
true
return
true
}
}
return
false
return
false
}
}
func
(
p
*
MsgSender
)
MsgFeedBack
(
msg
*
model
.
Msg
)
{
serverName
:=
msg
.
Message
.
Proto
if
serverName
!=
proto
.
Type_HEARTBEAT
{
d
:=
thriftservice
.
NewDispatchMsgTrans
(
nil
)
tool
.
Retry
(
config
.
GetRetryTimes
(),
config
.
GetRetryTime
(),
func
()
func
()
error
{
temp
:=
msg
return
func
()
error
{
_
,
err
:=
d
.
Feedback
(
temp
.
Message
)
return
err
}
}())
p
.
msgControl
.
DeleteMsg
(
msg
.
MsgId
)
}
}
// IsMatch 消息是否符合入机条件
// IsMatch 消息是否符合入机条件
func
(
p
*
MsgSender
)
IsMatch
(
msg
*
model
.
Msg
)
(
r
bool
)
{
func
(
p
*
MsgSender
)
IsMatch
(
msg
*
model
.
Msg
)
(
r
bool
)
{
code
,
err
:=
p
.
msgControl
.
GetMsgStatusCode
(
msg
.
MsgId
)
code
,
err
:=
p
.
msgControl
.
GetMsgStatusCode
(
msg
.
MsgId
)
...
...
main.go
View file @
bb74bd03
...
@@ -14,6 +14,7 @@ import (
...
@@ -14,6 +14,7 @@ import (
"fmt"
"fmt"
"os"
"os"
"os/exec"
"os/exec"
"runtime/debug"
"strings"
"strings"
"time"
"time"
...
@@ -60,8 +61,8 @@ var (
...
@@ -60,8 +61,8 @@ var (
)
)
func
main
()
{
func
main
()
{
//
InitService()
InitService
()
Work
()
//
Work()
}
}
func
InitService
()
{
func
InitService
()
{
...
@@ -114,19 +115,47 @@ func InitTimeTick() {
...
@@ -114,19 +115,47 @@ func InitTimeTick() {
}
}
func
Work
()
{
func
Work
()
{
CatchDump
()
//读取配置文件
//读取配置文件
InitCfg
()
InitCfg
()
InitLog
()
InitLog
()
InitGlobleVar
()
InitGlobleVar
()
InitTimeTick
()
InitTimeTick
()
StartThrift
()
StartThrift
()
go
ConsoleIn
()
//
go ConsoleIn()
http
.
ListenAndServe
(
":8080"
,
nil
)
http
.
ListenAndServe
(
":8080"
,
nil
)
//阻塞主协程
//阻塞主协程
<-
QuitFlag
<-
QuitFlag
log
.
Println
(
"退出"
)
log
.
Println
(
"退出"
)
}
}
func
CatchDump
()
{
errs
:=
recover
()
if
errs
==
nil
{
return
}
exeName
:=
os
.
Args
[
0
]
//获取程序名称
now
:=
time
.
Now
()
//获取当前时间
pid
:=
os
.
Getpid
()
//获取进程ID
time_str
:=
now
.
Format
(
"20060102150405"
)
//设定时间格式
fname
:=
fmt
.
Sprintf
(
"%s-%d-%s-dump.log"
,
exeName
,
pid
,
time_str
)
//保存错误信息文件名:程序名-进程ID-当前时间(年月日时分秒)
fmt
.
Println
(
"dump to file "
,
fname
)
f
,
err
:=
os
.
Create
(
fname
)
if
err
!=
nil
{
return
}
defer
f
.
Close
()
f
.
WriteString
(
fmt
.
Sprintf
(
"%v
\r\n
"
,
errs
))
//输出panic信息
f
.
WriteString
(
"========
\r\n
"
)
f
.
WriteString
(
string
(
debug
.
Stack
()))
//输出堆栈信息
os
.
Exit
(
0
)
}
// ConsoleIn 控制台输入
// ConsoleIn 控制台输入
func
ConsoleIn
()
{
func
ConsoleIn
()
{
inputReader
:=
bufio
.
NewReader
(
os
.
Stdin
)
//创建一个读取器,并将其与标准输入绑定。
inputReader
:=
bufio
.
NewReader
(
os
.
Stdin
)
//创建一个读取器,并将其与标准输入绑定。
...
...
model/client.go
View file @
bb74bd03
...
@@ -90,8 +90,7 @@ func (p *ClientManager) AddTimes(k string) bool {
...
@@ -90,8 +90,7 @@ func (p *ClientManager) AddTimes(k string) bool {
return
false
return
false
}
}
if
v
.
LostTimes
==
v
.
MaxLostTimes
{
if
v
.
LostTimes
==
v
.
MaxLostTimes
{
v
.
Trans
.
Close
()
p
.
DeleteClient
(
k
)
delete
(
p
.
mapClient
,
k
)
return
true
return
true
}
}
return
false
return
false
...
@@ -112,7 +111,12 @@ func (p *ClientManager) ClearTimes(k string) {
...
@@ -112,7 +111,12 @@ func (p *ClientManager) ClearTimes(k string) {
// DeleteClient 删除客户端
// DeleteClient 删除客户端
func
(
p
*
ClientManager
)
DeleteClient
(
k
string
)
{
func
(
p
*
ClientManager
)
DeleteClient
(
k
string
)
{
delete
(
p
.
mapClient
,
k
)
v
,
ok
:=
p
.
mapClient
[
k
]
if
ok
{
v
.
Trans
.
Close
()
delete
(
p
.
mapClient
,
k
)
}
}
}
// SetTime 设置上次心跳时间
// SetTime 设置上次心跳时间
...
...
nethandle/dispatchhandler.go
View file @
bb74bd03
...
@@ -3,9 +3,9 @@ package nethandle
...
@@ -3,9 +3,9 @@ package nethandle
import
(
import
(
"ficus/device"
"ficus/device"
"ficus/mission"
"ficus/mission"
"ficus_clientserver/config"
"ficus_clientserver/model"
"ficus_clientserver/model"
"ficus_clientserver/tool"
"ficus_clientserver/tool"
"time"
log
"github.com/sirupsen/logrus"
log
"github.com/sirupsen/logrus"
)
)
...
@@ -53,7 +53,7 @@ func (d *DispatchHandle) Heartbeat(whom *device.Device) (r bool, err error) {
...
@@ -53,7 +53,7 @@ func (d *DispatchHandle) Heartbeat(whom *device.Device) (r bool, err error) {
func
(
d
*
DispatchHandle
)
Feedback
(
response
*
mission
.
Message
)
(
r
bool
,
err
error
)
{
func
(
d
*
DispatchHandle
)
Feedback
(
response
*
mission
.
Message
)
(
r
bool
,
err
error
)
{
log
.
WithFields
(
log
.
Fields
{
"data"
:
string
(
response
.
Data
)})
.
Info
(
response
)
log
.
WithFields
(
log
.
Fields
{
"data"
:
string
(
response
.
Data
)})
.
Info
(
response
)
// TODO 更新消息状态
// TODO 更新消息状态
tool
.
Retry
(
3
,
time
.
Second
*
2
,
func
()
error
{
tool
.
Retry
(
config
.
GetRetryTimes
(),
config
.
GetRetryTime
()
,
func
()
error
{
// TODO 回调消息
// TODO 回调消息
d
.
dispatchService
.
Feedback
(
response
)
d
.
dispatchService
.
Feedback
(
response
)
d
.
msgControl
.
DeleteMsg
(
response
.
ID
)
d
.
msgControl
.
DeleteMsg
(
response
.
ID
)
...
...
nethandle/thriftservice/devicedispatch.go
View file @
bb74bd03
...
@@ -76,30 +76,37 @@ func (d *DeviceDispatch) Keep(device *device.Device, ip string) (r bool, err err
...
@@ -76,30 +76,37 @@ func (d *DeviceDispatch) Keep(device *device.Device, ip string) (r bool, err err
}
}
func
(
d
*
DeviceDispatch
)
GetPeer
(
uuid
string
)
(
r
string
,
err
error
)
{
func
(
d
*
DeviceDispatch
)
GetPeer
(
uuid
string
)
(
r
string
,
err
error
)
{
defer
d
.
tran
.
Close
()
return
""
,
nil
return
""
,
nil
}
}
func
(
d
*
DeviceDispatch
)
GetDeviceEx
(
uuid
string
)
(
r
*
device
.
DeviceEx
,
err
error
)
{
func
(
d
*
DeviceDispatch
)
GetDeviceEx
(
uuid
string
)
(
r
*
device
.
DeviceEx
,
err
error
)
{
defer
d
.
tran
.
Close
()
return
return
}
}
func
(
d
*
DeviceDispatch
)
ListByStatusEx
(
status
int32
,
page
int32
,
pageSize
int32
)
(
r
*
service
.
DevicesExPage
,
err
error
)
{
func
(
d
*
DeviceDispatch
)
ListByStatusEx
(
status
int32
,
page
int32
,
pageSize
int32
)
(
r
*
service
.
DevicesExPage
,
err
error
)
{
defer
d
.
tran
.
Close
()
return
nil
,
nil
return
nil
,
nil
}
}
func
(
d
*
DeviceDispatch
)
ListByOrganizationEx
(
org
*
identity
.
Organization
,
page
int32
,
pageSize
int32
)
(
r
*
service
.
DevicesExPage
,
err
error
)
{
func
(
d
*
DeviceDispatch
)
ListByOrganizationEx
(
org
*
identity
.
Organization
,
page
int32
,
pageSize
int32
)
(
r
*
service
.
DevicesExPage
,
err
error
)
{
defer
d
.
tran
.
Close
()
return
nil
,
nil
return
nil
,
nil
}
}
func
(
d
*
DeviceDispatch
)
ListByGroupEx
(
group
string
)
(
r
*
service
.
DevicesExPage
,
err
error
)
{
func
(
d
*
DeviceDispatch
)
ListByGroupEx
(
group
string
)
(
r
*
service
.
DevicesExPage
,
err
error
)
{
defer
d
.
tran
.
Close
()
return
nil
,
nil
return
nil
,
nil
}
}
func
(
d
*
DeviceDispatch
)
ListByRegionEx
(
rgn
string
)
(
r
*
service
.
DevicesExPage
,
err
error
)
{
func
(
d
*
DeviceDispatch
)
ListByRegionEx
(
rgn
string
)
(
r
*
service
.
DevicesExPage
,
err
error
)
{
defer
d
.
tran
.
Close
()
return
nil
,
nil
return
nil
,
nil
}
}
func
(
d
*
DeviceDispatch
)
ListByVersionEx
(
ver
string
,
page
int32
,
pageSize
int32
)
(
r
*
service
.
DevicesExPage
,
err
error
)
{
func
(
d
*
DeviceDispatch
)
ListByVersionEx
(
ver
string
,
page
int32
,
pageSize
int32
)
(
r
*
service
.
DevicesExPage
,
err
error
)
{
defer
d
.
tran
.
Close
()
return
return
}
}
...
@@ -128,10 +135,10 @@ func (d *DeviceDispatch) SetDispatch() error {
...
@@ -128,10 +135,10 @@ func (d *DeviceDispatch) SetDispatch() error {
protocolFactory
:=
thrift
.
NewTCompactProtocolFactory
()
protocolFactory
:=
thrift
.
NewTCompactProtocolFactory
()
// 打开Transport,与服务器进行连接
// 打开Transport,与服务器进行连接
if
err
:=
transport
.
Open
();
err
!=
nil
{
if
err
:=
transport
.
Open
();
err
!=
nil
{
log
.
Error
(
"Error opening socket to "
+
"localhost"
+
":"
+
"9
9
99"
,
err
)
log
.
Error
(
"Error opening socket to "
+
"localhost"
+
":"
+
"9
0
99"
,
err
)
return
err
return
err
}
}
client
:=
service
.
NewDeviceServiceClientFactory
(
socke
t
,
protocolFactory
)
client
:=
service
.
NewDeviceServiceClientFactory
(
transpor
t
,
protocolFactory
)
d
.
tran
=
transport
d
.
tran
=
transport
d
.
client
=
client
d
.
client
=
client
return
nil
return
nil
...
...
nethandle/thriftservice/messagedispatch.go
View file @
bb74bd03
...
@@ -90,7 +90,6 @@ func (d *DispatchMsg) Feedback(response *mission.Message) (r bool, err error) {
...
@@ -90,7 +90,6 @@ func (d *DispatchMsg) Feedback(response *mission.Message) (r bool, err error) {
// client登录接口
// client登录接口
func
(
d
*
DispatchMsg
)
Login
(
device
*
device
.
Device
)
(
r
bool
,
err
error
)
{
func
(
d
*
DispatchMsg
)
Login
(
device
*
device
.
Device
)
(
r
bool
,
err
error
)
{
log
.
WithFields
(
log
.
Fields
{
"func"
:
"Login"
,
"登录id"
:
device
.
ID
})
.
Info
(
device
)
//TODO 写路由信息到设备服务 ,待接入 eureka获取ip 和端口
//TODO 写路由信息到设备服务 ,待接入 eureka获取ip 和端口
go
func
()
{
go
func
()
{
//判断是否存在
//判断是否存在
...
@@ -106,10 +105,11 @@ func (d *DispatchMsg) Login(device *device.Device) (r bool, err error) {
...
@@ -106,10 +105,11 @@ func (d *DispatchMsg) Login(device *device.Device) (r bool, err error) {
err
:=
d
.
deviceDispatch
.
SetDispatch
()
err
:=
d
.
deviceDispatch
.
SetDispatch
()
if
err
!=
nil
{
if
err
!=
nil
{
d
.
clientManager
.
DeleteClient
(
key
)
return
return
}
}
// 请求失败重试机制
// 请求失败重试机制
err
=
tool
.
Retry
(
5
,
time
.
Second
*
2
,
func
()
func
()
error
{
err
=
tool
.
Retry
(
config
.
GetRetryTimes
(),
config
.
GetRetryTime
()
,
func
()
func
()
error
{
temp
:=
device
temp
:=
device
ip
:=
config
.
GetAppIp
()
ip
:=
config
.
GetAppIp
()
return
func
()
error
{
return
func
()
error
{
...
@@ -118,6 +118,7 @@ func (d *DispatchMsg) Login(device *device.Device) (r bool, err error) {
...
@@ -118,6 +118,7 @@ func (d *DispatchMsg) Login(device *device.Device) (r bool, err error) {
}
}
}())
}())
if
err
!=
nil
{
if
err
!=
nil
{
d
.
clientManager
.
DeleteClient
(
key
)
log
.
Errorln
(
"Activate retry "
,
err
)
log
.
Errorln
(
"Activate retry "
,
err
)
}
}
}()
}()
...
...
nethandle/thriftservice/packagehandler.go
View file @
bb74bd03
...
@@ -3,14 +3,9 @@ package thriftservice
...
@@ -3,14 +3,9 @@ package thriftservice
import
(
import
(
"context"
"context"
"ficus/pkg"
"ficus/pkg"
"ficus/service"
"ficus_clientserver/FileController"
"ficus_clientserver/FileController"
"ficus_clientserver/config"
"ficus_clientserver/nethandle"
"ficus_clientserver/nethandle"
"ficus_clientserver/tool"
"net"
"github.com/apache/thrift/lib/go/thrift"
log
"github.com/sirupsen/logrus"
log
"github.com/sirupsen/logrus"
)
)
...
@@ -20,8 +15,6 @@ type (
...
@@ -20,8 +15,6 @@ type (
}
}
PackageDispatch
struct
{
PackageDispatch
struct
{
client
*
service
.
PackageServiceClient
tran
*
thrift
.
TFramedTransport
}
}
)
)
...
@@ -55,26 +48,5 @@ func (s *PackageDispatch) GetSpec(pkgName string, ver string) (r *pkg.PackageSpe
...
@@ -55,26 +48,5 @@ func (s *PackageDispatch) GetSpec(pkgName string, ver string) (r *pkg.PackageSpe
}
}
func
(
d
*
PackageDispatch
)
SetDispatch
()
error
{
func
(
d
*
PackageDispatch
)
SetDispatch
()
error
{
ip
,
port
,
err
:=
tool
.
GetApp
(
config
.
GetDeviceServerName
())
if
err
!=
nil
{
return
err
}
//TODO 心跳
socket
,
err
:=
thrift
.
NewTSocket
(
net
.
JoinHostPort
(
ip
,
port
))
if
err
!=
nil
{
log
.
Error
(
"Error opening socket:"
,
err
)
return
err
}
transport
:=
thrift
.
NewTFramedTransport
(
socket
)
// 创建二进制协议
protocolFactory
:=
thrift
.
NewTCompactProtocolFactory
()
// 打开Transport,与服务器进行连接
if
err
:=
transport
.
Open
();
err
!=
nil
{
log
.
Error
(
"Error opening socket to "
+
"localhost"
+
":"
+
"9999"
,
err
)
return
err
}
client
:=
service
.
NewPackageServiceClientFactory
(
socket
,
protocolFactory
)
d
.
tran
=
transport
d
.
client
=
client
return
nil
return
nil
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment