Commit 47a84b63 by zhangjie

1. token的KEY改为配置文件可配,以便区分测试环境和生产环境

2. 硬件TCP连接服务剥离出去(未测试) 3. 重新整理GRPC文件名及包名
parent ebd6fd46
...@@ -2,7 +2,6 @@ package api_server_ops ...@@ -2,7 +2,6 @@ package api_server_ops
import ( import (
"dc_golang_server_1/api" "dc_golang_server_1/api"
"dc_golang_server_1/dev_product/dcphone20"
"dc_golang_server_1/logger" "dc_golang_server_1/logger"
"dc_golang_server_1/util" "dc_golang_server_1/util"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
...@@ -11,7 +10,7 @@ import ( ...@@ -11,7 +10,7 @@ import (
type apiGetSystemRunParaStruct struct { type apiGetSystemRunParaStruct struct {
util.Server util.Server
PhoneTcpSocketNo int32 `json:"phoneSocketNo"` // 电话机Socket连接数 // PhoneTcpSocketNo int32 `json:"phoneSocketNo"` // 电话机Socket连接数
HttpReqNo int32 `json:"httpReqNo"` // 当前http请求数 HttpReqNo int32 `json:"httpReqNo"` // 当前http请求数
} }
...@@ -33,7 +32,7 @@ func GetSystemRunPara(c *gin.Context) { ...@@ -33,7 +32,7 @@ func GetSystemRunPara(c *gin.Context) {
Ram: util.GetRamInfo(), Ram: util.GetRamInfo(),
Disk: util.GetDiskInfo(), Disk: util.GetDiskInfo(),
}, },
dcphone20.TCP.ConnSocketCount, // dcphone20.TCP.ConnSocketCount,
logger.GinHttpReqNum, logger.GinHttpReqNum,
}, },
}) })
...@@ -43,4 +42,4 @@ func GetSystemRunPara(c *gin.Context) { ...@@ -43,4 +42,4 @@ func GetSystemRunPara(c *gin.Context) {
// todo 暂停硬件链接并关闭所有的socket 同时这个接口可开启正常链接 // todo 暂停硬件链接并关闭所有的socket 同时这个接口可开启正常链接
// todo 停止服务,通过1个channel到主函数,如果停止,等所有web响应结束了停止 // todo 停止服务,通过1个channel到主函数,如果停止,等所有web响应结束了停止
\ No newline at end of file
...@@ -3,14 +3,13 @@ package api ...@@ -3,14 +3,13 @@ package api
import ( import (
"dc_golang_server_1/data_db_cache/cache" "dc_golang_server_1/data_db_cache/cache"
"dc_golang_server_1/util" "dc_golang_server_1/util"
"dc_golang_server_1/util/setting"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"math/rand" "math/rand"
"net/http" "net/http"
"time" "time"
) )
const jeffWTKey = "jeffWT@666%b;'~+"
//const jeffWTTable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" //const jeffWTTable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
const tokenClearLen = 20 const tokenClearLen = 20
...@@ -58,7 +57,7 @@ func CreateToken(creatTime int64, userID uint32, userType uint8, expireTime uint ...@@ -58,7 +57,7 @@ func CreateToken(creatTime int64, userID uint32, userType uint8, expireTime uint
clear[18] = ^(clear[18] + random - 15) clear[18] = ^(clear[18] + random - 15)
clear[19] = ^clear[19] - random clear[19] = ^clear[19] - random
return util.EncryptBytesToBase64URL(clear, jeffWTKey) return util.EncryptBytesToBase64URL(clear, setting.TokenKEY)
} }
func DecryptToken(token string) (clearStruct TokenResult) { func DecryptToken(token string) (clearStruct TokenResult) {
...@@ -67,7 +66,7 @@ func DecryptToken(token string) (clearStruct TokenResult) { ...@@ -67,7 +66,7 @@ func DecryptToken(token string) (clearStruct TokenResult) {
clearStruct.CheckResult = ErrorTokenExist clearStruct.CheckResult = ErrorTokenExist
return return
} }
clear, err := util.DecryptBase64URLToBytes(token, jeffWTKey) clear, err := util.DecryptBase64URLToBytes(token, setting.TokenKEY)
if err != nil { if err != nil {
// todo logger 有人在非法请求 // todo logger 有人在非法请求
clearStruct.CheckResult = ErrorTokenWrong clearStruct.CheckResult = ErrorTokenWrong
......
[token]
KEY = `jeffWT@666%b;'~+`
[grpc_server]
Grpc2AdminListenPort = :7010
Grpc2TcpConnListenPort = :7011
[grpc_client]
GrpcFromDeviceConnServerIpPort = 127.0.0.1:7020
[allin_pay] [allin_pay]
#测试 K12B 正式 K12B- #测试 K12B 正式 K12B-
AdminHead = K12B AdminHead = K12B
......
package dev_product package dev_product
import ( import (
"context"
"dc_golang_server_1/data_db_cache/dbcurd" "dc_golang_server_1/data_db_cache/dbcurd"
"dc_golang_server_1/grpc_client/GrpcFromDeviceConn"
"dc_golang_server_1/logger" "dc_golang_server_1/logger"
deviceConnServer "dc_golang_server_1/my_grpc/grpc_deviceConnServer"
"dc_golang_server_1/util" "dc_golang_server_1/util"
"encoding/hex" "encoding/hex"
"errors"
"go.uber.org/zap" "go.uber.org/zap"
"net"
"strconv" "strconv"
"time" "time"
) )
...@@ -16,7 +19,6 @@ import ( ...@@ -16,7 +19,6 @@ import (
//} //}
type DCLongTCPHex struct { type DCLongTCPHex struct {
TCPLongServer
password string password string
iv string iv string
devType uint8 devType uint8
...@@ -71,25 +73,19 @@ func /*(d *DCLongTCPHex)*/ insertDevHexCommandRecordRW(data *HexData, ciphertext ...@@ -71,25 +73,19 @@ func /*(d *DCLongTCPHex)*/ insertDevHexCommandRecordRW(data *HexData, ciphertext
}) })
} }
func (d *DCLongTCPHex) receiveResponse(conn *net.TCPConn, data []byte, nowConnDevID uint32) uint32 { func (d *DCLongTCPHex) ReceiveResponse(data []byte) (uint32, []byte, error) {
c, err := util.DecryptBase64ToBytes(data, d.password, d.iv) c, err := util.DecryptBase64ToBytes(data, d.password, d.iv)
if err != nil { if err != nil {
if nowConnDevID != 0 { return 0, nil, err
dbcurd.InsertDevCommandErr(nowConnDevID, string(data), "Decrypt err")
}
return 0
} }
if util.CheckCRC(c) == false { if util.CheckCRC(c) == false {
dbcurd.InsertDevCommandErr(nowConnDevID, string(data), "CheckCRC err") return 0, nil, errors.New("CheckCRC err")
return 0
} }
cLen := len(c) cLen := len(c)
if cLen < 12 { if cLen < 12 {
dbcurd.InsertDevCommandErr(nowConnDevID, string(data), "cLen<12") return 0, nil, errors.New("cLen<12")
return 0
} else if int(c[9])+12 != cLen { } else if int(c[9])+12 != cLen {
dbcurd.InsertDevCommandErr(nowConnDevID, string(data), "cLen!=c[9]+12") return 0, nil, errors.New("cLen!=c[9]+12")
return 0
} }
var rData HexData var rData HexData
...@@ -97,15 +93,13 @@ func (d *DCLongTCPHex) receiveResponse(conn *net.TCPConn, data []byte, nowConnDe ...@@ -97,15 +93,13 @@ func (d *DCLongTCPHex) receiveResponse(conn *net.TCPConn, data []byte, nowConnDe
// 时间有效性判断 // 时间有效性判断
nowTimeUtc := uint32(time.Now().Unix()) nowTimeUtc := uint32(time.Now().Unix())
if nowTimeUtc > rData.TimeUtc+300 || rData.TimeUtc > nowTimeUtc+300 { if nowTimeUtc > rData.TimeUtc+300 || rData.TimeUtc > nowTimeUtc+300 { // 允许5分钟以内的
dbcurd.InsertDevCommandErr(nowConnDevID, string(data), "utc err:"+strconv.FormatUint(uint64(rData.TimeUtc), 10)) return rData.DevID, nil, errors.New("utc err")
return 0
} }
// 设备类型判断 // 设备类型判断
if c[4] != d.devType { if c[4] != d.devType {
dbcurd.InsertDevCommandErr(nowConnDevID, string(data), "devType error") return rData.DevID, nil, errors.New("devType error")
return 0
} }
rData.DevID = uint32(c[4])<<24 | uint32(c[5])<<16 | uint32(c[6])<<8 | uint32(c[7]) rData.DevID = uint32(c[4])<<24 | uint32(c[5])<<16 | uint32(c[6])<<8 | uint32(c[7])
...@@ -126,73 +120,44 @@ func (d *DCLongTCPHex) receiveResponse(conn *net.TCPConn, data []byte, nowConnDe ...@@ -126,73 +120,44 @@ func (d *DCLongTCPHex) receiveResponse(conn *net.TCPConn, data []byte, nowConnDe
//if sendFlag {time.Sleep(20*time.Millisecond)} //这句话是为了多帧发送间隔20MS,可以不加试试 //if sendFlag {time.Sleep(20*time.Millisecond)} //这句话是为了多帧发送间隔20MS,可以不加试试
if _, err = conn.Write(sendStr); err != nil { //if _, err = conn.Write(sendStr); err != nil {
//logger.Log.Debug("conn.Write(sendStr) error", // 刚收到发来的,现在居然发不回去了 // //logger.Log.Debug("conn.Write(sendStr) error", // 刚收到发来的,现在居然发不回去了
// zap.String("Src", "TCP-SERVER-receive"), // // zap.String("Src", "TCP-SERVER-receive"),
// zap.Uint32("DevID", rData.DevID), // // zap.Uint32("DevID", rData.DevID),
// zap.String("RData", string(data)), // // zap.String("RData", string(data)),
// zap.String("SendStr", string(sendStr)), // // zap.String("SendStr", string(sendStr)),
// zap.String("Conn", conn.RemoteAddr().String())) // // zap.String("Conn", conn.RemoteAddr().String()))
//if nowConnDevID == 0 { //刚才没有ID的在这里记 // //if nowConnDevID == 0 { //刚才没有ID的在这里记
// model.InsertDevCommandErr(rData.DevID,string(data),"A error") // // model.InsertDevCommandErr(rData.DevID,string(data),"A error")
//} // //}
return 0 // return 0
} //}
//if rData.CtrlCode != 0xc1 && rData.CtrlCode != 0xbf { //心跳不记 开机注册不记 //if rData.CtrlCode != 0xc1 && rData.CtrlCode != 0xbf { //心跳不记 开机注册不记
insertDevHexCommandRecordRW(&recData, string(data), 0, &rData, string(sendStr), 1) //0接收 1回复 2主动下发 insertDevHexCommandRecordRW(&recData, string(data), 0, &rData, string(sendStr), 1) //0接收 1回复 2主动下发
//} //}
return rData.DevID, sendStr, nil
} else { } else {
insertDevHexCommandRecord(&recData, string(data), 0) insertDevHexCommandRecord(&recData, string(data), 0)
} }
return rData.DevID //解密成功且CRC校验成功,设备类型一致,解析长度正确,则为合法设备 return rData.DevID, nil, nil //解密成功且CRC校验成功,设备类型一致,解析长度正确,则为合法设备
} }
func (d *DCLongTCPHex) TCPSend(data *HexData) bool { func (d *DCLongTCPHex) TCPSend(data *HexData) bool {
//d.ConnectMapRWMutex.RLock() sendStr := d.packageSendData(data)
//c,ok := d.ConnectMap[data.DevID]// conn,ok := d.ConnectMap.Load(data.DevID) sendStr[0] = '['
//d.ConnectMapRWMutex.RUnlock() sendStr[len(sendStr)-1] = ']'
if conn, ok := d.ConnectMap.Load(data.DevID); ok { res, err := GrpcFromDeviceConn.Client.SendMsgToDevice(context.Background(), &deviceConnServer.SendMsgToDeviceReq{
if c, ok := conn.(*net.TCPConn); ok { // 类型断言 DevID: data.DevID,
sendStr := d.packageSendData(data) Data: nil,
sendStr[0] = '[' })
sendStr[len(sendStr)-1] = ']' if err != nil { // grpc 请求错误
if _, err := c.Write(sendStr); err != nil { logger.Log.Warn("GrpcFromDeviceConn.Client.SendMsgToDevice err", zap.Uint32("devID", data.DevID), zap.Reflect("data", data), zap.String("sendStr", string(sendStr)))
//d.ConnectMapRWMutex.Lock() return false
//delete(d.ConnectMap,data.DevID)// d.ConnectMap.Delete(data.DevID)
//d.ConnectMapRWMutex.Unlock()
/*errC*/
_ = c.Close()
d.ConnectMap.Delete(data.DevID)
/*if errC != nil {
model.DevConnectRecord(data.DevID,false,'W')
} else {
model.DevConnectRecord(data.DevID,false,'w')
}*/
//logger.Log.Debug("conn.Write(sendStr) error", //
// zap.String("Src", "TCP-SERVER-TCPSend"),
// zap.Uint32("DevID", data.DevID),
// zap.Error(err),
// zap.String("SendStr", string(sendStr)),
// zap.String("Conn", c.RemoteAddr().String()),
// zap.String("State", "offline"))
return false
}
insertDevHexCommandRecord(data, string(sendStr), 2) //0接收 1回复 2主动下发
return true
} else {
// ntodo logger map里面存的内容居然类型不对
d.ConnectMap.Delete(data.DevID)
logger.Log.Error("conn.(*net.TCPConn) != ok", //
zap.String("Src", "TCP-SERVER-TCPSend"),
zap.Uint32("DevID", data.DevID),
zap.String("Conn", c.RemoteAddr().String()),
zap.String("State", "offline"))
}
} }
return res.Res
return false
} }
func (d *DCLongTCPHex) InitNewDCLongTCPHex(password string, iv string, devType uint8, f func(data *HexData)) { func (d *DCLongTCPHex) InitNewDCLongTCPHex(password string, iv string, devType uint8, f func(data *HexData)) {
...@@ -200,10 +165,13 @@ func (d *DCLongTCPHex) InitNewDCLongTCPHex(password string, iv string, devType u ...@@ -200,10 +165,13 @@ func (d *DCLongTCPHex) InitNewDCLongTCPHex(password string, iv string, devType u
d.iv = iv d.iv = iv
d.devType = devType d.devType = devType
d.protocolAnalysis = f d.protocolAnalysis = f
d.TCPReceive = d.receiveResponse
// d.ConnectMap = make(map[uint32]*net.TCPConn) // d.ConnectMap = make(map[uint32]*net.TCPConn)
} }
//func (d *DCLongTCPHex) GetSocketConnNum(){ // 这里不提供,放到后台管理端去提供
//
//}
// 组装并加密数据 // 组装并加密数据
func (d *DCLongTCPHex) packageSendData(sData *HexData) []byte { func (d *DCLongTCPHex) packageSendData(sData *HexData) []byte {
hexBuf := make([]byte, sData.Length+12) hexBuf := make([]byte, sData.Length+12)
......
package dcphone20 package dcphone20
import ( import (
config2 "dc_golang_server_1/util/setting" "dc_golang_server_1/grpc_client/GrpcFromDeviceConn"
"dc_golang_server_1/grpc_server/Grpc2Phone20TcpConn"
myGRPC "dc_golang_server_1/my_grpc/grpc_k122Server"
"google.golang.org/grpc"
"net"
) )
var TCP DCPhone20
func NewDCPhone20() { func NewDCPhone20() {
// var DcPhone20TCP DCPhone20 go func() { // todo 加下 recover
TCP.NewDCPhone20("DCRYM-2018-pswd.", "I can't tell YOU", 0x5B) // setting GrpcFromDeviceConn.Init()
TCP.TCPStart(config2.TcpLongPort) var tcp DCPhone20
tcp.NewDCPhone20("DCRYM-2018-pswd.", "I can't tell YOU", 0x5B) // setting
l, err := net.Listen("tcp", ":7011")
if err != nil {
panic(err)
}
s := grpc.NewServer()
myGRPC.RegisterGrpc2TcpConnServer(s, &Grpc2Phone20TcpConn.ToTcpConnServer{
ReceiveResponse: tcp.ReceiveResponse,
})
err = s.Serve(l)
if err != nil {
panic(err)
}
}()
} }
...@@ -19,19 +19,8 @@ import ( ...@@ -19,19 +19,8 @@ import (
"time" "time"
) )
//type DCPhone10StateStruct struct{
// rTime time.Time
// csq0 uint8
// csq1 uint8
// state uint8
// m1state uint8
// m2state uint8
// errCode uint8
//}
type DCPhone20 struct { type DCPhone20 struct {
dev_product.DCLongTCPHex dev_product.DCLongTCPHex
// MapDCPhone10State sync.Map
} }
func (dev *DCPhone20) NewDCPhone20(password string, iv string, devType uint8) { func (dev *DCPhone20) NewDCPhone20(password string, iv string, devType uint8) {
......
...@@ -194,134 +194,6 @@ var doc = `{ ...@@ -194,134 +194,6 @@ var doc = `{
} }
} }
}, },
"/phone20/online": {
"delete": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "主动关闭设备链接",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"phone20"
],
"summary": "主动关闭设备链接[complete]",
"parameters": [
{
"description": "入参",
"name": "ids",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dcphone20.reqIDs"
}
}
],
"responses": {
"0": {
"description": "出参",
"schema": {
"$ref": "#/definitions/dcphone20.resGetOnlineList"
}
}
}
}
},
"/phone20/online/all": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "查整个在线设备列表",
"produces": [
"application/json"
],
"tags": [
"phone20"
],
"summary": "查整个在线设备列表[complete]",
"responses": {
"0": {
"description": "出参",
"schema": {
"$ref": "#/definitions/dcphone20.resGetOnlineAll"
}
}
}
}
},
"/phone20/online/list": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "根据设备ID,查询是否在线",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"phone20"
],
"summary": "查设备是否在线[complete]",
"parameters": [
{
"description": "入参",
"name": "ids",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dcphone20.reqIDs"
}
}
],
"responses": {
"0": {
"description": "出参",
"schema": {
"$ref": "#/definitions/dcphone20.resGetOnlineList"
}
}
}
}
},
"/phone20/online/num": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "查在线设备总数量",
"produces": [
"application/json"
],
"tags": [
"phone20"
],
"summary": "查在线设备总数量[complete]",
"responses": {
"0": {
"description": "出参",
"schema": {
"$ref": "#/definitions/dcphone20.resGetOnlineTotal"
}
}
}
}
},
"/phone20/para/:paraName": { "/phone20/para/:paraName": {
"get": { "get": {
"security": [ "security": [
...@@ -1729,16 +1601,12 @@ var doc = `{ ...@@ -1729,16 +1601,12 @@ var doc = `{
"$ref": "#/definitions/util.Disk" "$ref": "#/definitions/util.Disk"
}, },
"httpReqNo": { "httpReqNo": {
"description": "当前http请求数", "description": "PhoneTcpSocketNo int32 ` + "`" + `json:\"phoneSocketNo\"` + "`" + ` // 电话机Socket连接数",
"type": "integer" "type": "integer"
}, },
"os": { "os": {
"$ref": "#/definitions/util.Os" "$ref": "#/definitions/util.Os"
}, },
"phoneSocketNo": {
"description": "电话机Socket连接数",
"type": "integer"
},
"ram": { "ram": {
"$ref": "#/definitions/util.Ram" "$ref": "#/definitions/util.Ram"
} }
...@@ -2212,23 +2080,6 @@ var doc = `{ ...@@ -2212,23 +2080,6 @@ var doc = `{
} }
} }
}, },
"dcphone20.resGetOnlineAll": {
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"devID": {
"type": "array",
"items": {
"type": "integer"
}
},
"socket": {
"type": "integer"
}
}
},
"dcphone20.resGetOnlineList": { "dcphone20.resGetOnlineList": {
"type": "object", "type": "object",
"properties": { "properties": {
...@@ -2243,17 +2094,6 @@ var doc = `{ ...@@ -2243,17 +2094,6 @@ var doc = `{
} }
} }
}, },
"dcphone20.resGetOnlineTotal": {
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"socket": {
"type": "integer"
}
}
},
"model.CacheBDistrictStruct": { "model.CacheBDistrictStruct": {
"type": "object", "type": "object",
"properties": { "properties": {
...@@ -2457,7 +2297,7 @@ var SwaggerInfo = swaggerInfo{ ...@@ -2457,7 +2297,7 @@ var SwaggerInfo = swaggerInfo{
BasePath: "/", BasePath: "/",
Schemes: []string{}, Schemes: []string{},
Title: "多彩中小学一卡通系统", Title: "多彩中小学一卡通系统",
Description: "头像上传下载变化\n2022-02-08 头像上传下载接口调整为:(POST上传\"baseurl/png\")/(GET下载小头像\"baseurl/small/{id}\")/(GET下载大头像\"baseurl/big/{id}\")\n2022-02-08 去掉 [根据学生ID获取学生头像上传的token]和[根据学生ID获取学生大头像下载的url] 接口\n2022-02-08 [通过邀请码获取学生预览信息]去掉avatar字段,增加id字段,根据ID拿大小头像,用户可点击小头像展示大头像\n2022-02-08 [获取学生列表]、[获取单个学生信息]、[获取单个学生信息和最新动态]去掉Avatar字段\n2022-02-08 公话卡页面,增加一个ICON(客服电话),增加根据区服务ID查询区域服务服务电话,后台区域服务增加该字段 /we/areaservicephone\n2022-02-08 增加 云家信 用户协议 \"https://k12.dcrym.com/other/agreement.html\"\n/we/paylist 接口调整\n/we/pay 接口调整\n/we/payrecord 接口调整\n/we/payrecord/{aid} [GET] 接口增加字段", Description: "头像上传下载变化\n2022-02-08 头像上传下载接口调整为:(POST上传\"baseurl/png\")/(GET下载小头像\"baseurl/small/{id}\")/(GET下载大头像\"baseurl/big/{id}\")\n2022-02-08 去掉 [根据学生ID获取学生头像上传的token]和[根据学生ID获取学生大头像下载的url] 接口\n2022-02-08 [通过邀请码获取学生预览信息]去掉avatar字段,增加id字段,根据ID拿大小头像,用户可点击小头像展示大头像\n2022-02-08 [获取学生列表]、[获取单个学生信息]、[获取单个学生信息和最新动态]去掉Avatar字段\n2022-02-08 公话卡页面,增加一个ICON(客服电话),增加根据区服务ID查询区域服务服务电话,后台区域服务增加该字段 /we/areaservicephone\n2022-02-08 增加 云家信 用户协议 \"https://k12.dcrym.com/other/agreement.html\"\n/we/paylist 接口调整\n/we/pay 接口调整\n/we/payrecord 接口调整\n/we/payrecord/{aid} [GET] 接口增加字段\n2022-02-26 /serverops/sysstate [GET] 取消PhoneTcpSocketNo字段,在adminServer去增加,因为连接硬件的服务从本服务剥离出去了",
} }
type s struct{} type s struct{}
......
{ {
"swagger": "2.0", "swagger": "2.0",
"info": { "info": {
"description": "头像上传下载变化\n2022-02-08 头像上传下载接口调整为:(POST上传\"baseurl/png\")/(GET下载小头像\"baseurl/small/{id}\")/(GET下载大头像\"baseurl/big/{id}\")\n2022-02-08 去掉 [根据学生ID获取学生头像上传的token]和[根据学生ID获取学生大头像下载的url] 接口\n2022-02-08 [通过邀请码获取学生预览信息]去掉avatar字段,增加id字段,根据ID拿大小头像,用户可点击小头像展示大头像\n2022-02-08 [获取学生列表]、[获取单个学生信息]、[获取单个学生信息和最新动态]去掉Avatar字段\n2022-02-08 公话卡页面,增加一个ICON(客服电话),增加根据区服务ID查询区域服务服务电话,后台区域服务增加该字段 /we/areaservicephone\n2022-02-08 增加 云家信 用户协议 \"https://k12.dcrym.com/other/agreement.html\"\n/we/paylist 接口调整\n/we/pay 接口调整\n/we/payrecord 接口调整\n/we/payrecord/{aid} [GET] 接口增加字段", "description": "头像上传下载变化\n2022-02-08 头像上传下载接口调整为:(POST上传\"baseurl/png\")/(GET下载小头像\"baseurl/small/{id}\")/(GET下载大头像\"baseurl/big/{id}\")\n2022-02-08 去掉 [根据学生ID获取学生头像上传的token]和[根据学生ID获取学生大头像下载的url] 接口\n2022-02-08 [通过邀请码获取学生预览信息]去掉avatar字段,增加id字段,根据ID拿大小头像,用户可点击小头像展示大头像\n2022-02-08 [获取学生列表]、[获取单个学生信息]、[获取单个学生信息和最新动态]去掉Avatar字段\n2022-02-08 公话卡页面,增加一个ICON(客服电话),增加根据区服务ID查询区域服务服务电话,后台区域服务增加该字段 /we/areaservicephone\n2022-02-08 增加 云家信 用户协议 \"https://k12.dcrym.com/other/agreement.html\"\n/we/paylist 接口调整\n/we/pay 接口调整\n/we/payrecord 接口调整\n/we/payrecord/{aid} [GET] 接口增加字段\n2022-02-26 /serverops/sysstate [GET] 取消PhoneTcpSocketNo字段,在adminServer去增加,因为连接硬件的服务从本服务剥离出去了",
"title": "多彩中小学一卡通系统", "title": "多彩中小学一卡通系统",
"contact": {}, "contact": {},
"version": "V0.0.9" "version": "V0.0.9"
...@@ -179,134 +179,6 @@ ...@@ -179,134 +179,6 @@
} }
} }
}, },
"/phone20/online": {
"delete": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "主动关闭设备链接",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"phone20"
],
"summary": "主动关闭设备链接[complete]",
"parameters": [
{
"description": "入参",
"name": "ids",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dcphone20.reqIDs"
}
}
],
"responses": {
"0": {
"description": "出参",
"schema": {
"$ref": "#/definitions/dcphone20.resGetOnlineList"
}
}
}
}
},
"/phone20/online/all": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "查整个在线设备列表",
"produces": [
"application/json"
],
"tags": [
"phone20"
],
"summary": "查整个在线设备列表[complete]",
"responses": {
"0": {
"description": "出参",
"schema": {
"$ref": "#/definitions/dcphone20.resGetOnlineAll"
}
}
}
}
},
"/phone20/online/list": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "根据设备ID,查询是否在线",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"phone20"
],
"summary": "查设备是否在线[complete]",
"parameters": [
{
"description": "入参",
"name": "ids",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dcphone20.reqIDs"
}
}
],
"responses": {
"0": {
"description": "出参",
"schema": {
"$ref": "#/definitions/dcphone20.resGetOnlineList"
}
}
}
}
},
"/phone20/online/num": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "查在线设备总数量",
"produces": [
"application/json"
],
"tags": [
"phone20"
],
"summary": "查在线设备总数量[complete]",
"responses": {
"0": {
"description": "出参",
"schema": {
"$ref": "#/definitions/dcphone20.resGetOnlineTotal"
}
}
}
}
},
"/phone20/para/:paraName": { "/phone20/para/:paraName": {
"get": { "get": {
"security": [ "security": [
...@@ -1714,16 +1586,12 @@ ...@@ -1714,16 +1586,12 @@
"$ref": "#/definitions/util.Disk" "$ref": "#/definitions/util.Disk"
}, },
"httpReqNo": { "httpReqNo": {
"description": "当前http请求数", "description": "PhoneTcpSocketNo int32 `json:\"phoneSocketNo\"` // 电话机Socket连接数",
"type": "integer" "type": "integer"
}, },
"os": { "os": {
"$ref": "#/definitions/util.Os" "$ref": "#/definitions/util.Os"
}, },
"phoneSocketNo": {
"description": "电话机Socket连接数",
"type": "integer"
},
"ram": { "ram": {
"$ref": "#/definitions/util.Ram" "$ref": "#/definitions/util.Ram"
} }
...@@ -2197,23 +2065,6 @@ ...@@ -2197,23 +2065,6 @@
} }
} }
}, },
"dcphone20.resGetOnlineAll": {
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"devID": {
"type": "array",
"items": {
"type": "integer"
}
},
"socket": {
"type": "integer"
}
}
},
"dcphone20.resGetOnlineList": { "dcphone20.resGetOnlineList": {
"type": "object", "type": "object",
"properties": { "properties": {
...@@ -2228,17 +2079,6 @@ ...@@ -2228,17 +2079,6 @@
} }
} }
}, },
"dcphone20.resGetOnlineTotal": {
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"socket": {
"type": "integer"
}
}
},
"model.CacheBDistrictStruct": { "model.CacheBDistrictStruct": {
"type": "object", "type": "object",
"properties": { "properties": {
......
...@@ -31,13 +31,10 @@ definitions: ...@@ -31,13 +31,10 @@ definitions:
disk: disk:
$ref: '#/definitions/util.Disk' $ref: '#/definitions/util.Disk'
httpReqNo: httpReqNo:
description: 当前http请求 description: PhoneTcpSocketNo int32 `json:"phoneSocketNo"` // 电话机Socket连接
type: integer type: integer
os: os:
$ref: '#/definitions/util.Os' $ref: '#/definitions/util.Os'
phoneSocketNo:
description: 电话机Socket连接数
type: integer
ram: ram:
$ref: '#/definitions/util.Ram' $ref: '#/definitions/util.Ram'
type: object type: object
...@@ -381,17 +378,6 @@ definitions: ...@@ -381,17 +378,6 @@ definitions:
type: integer type: integer
type: array type: array
type: object type: object
dcphone20.resGetOnlineAll:
properties:
count:
type: integer
devID:
items:
type: integer
type: array
socket:
type: integer
type: object
dcphone20.resGetOnlineList: dcphone20.resGetOnlineList:
properties: properties:
count: count:
...@@ -401,13 +387,6 @@ definitions: ...@@ -401,13 +387,6 @@ definitions:
type: boolean type: boolean
type: object type: object
type: object type: object
dcphone20.resGetOnlineTotal:
properties:
count:
type: integer
socket:
type: integer
type: object
model.CacheBDistrictStruct: model.CacheBDistrictStruct:
properties: properties:
id: id:
...@@ -549,6 +528,7 @@ info: ...@@ -549,6 +528,7 @@ info:
/we/pay 接口调整 /we/pay 接口调整
/we/payrecord 接口调整 /we/payrecord 接口调整
/we/payrecord/{aid} [GET] 接口增加字段 /we/payrecord/{aid} [GET] 接口增加字段
2022-02-26 /serverops/sysstate [GET] 取消PhoneTcpSocketNo字段,在adminServer去增加,因为连接硬件的服务从本服务剥离出去了
title: 多彩中小学一卡通系统 title: 多彩中小学一卡通系统
version: V0.0.9 version: V0.0.9
paths: paths:
...@@ -662,84 +642,6 @@ paths: ...@@ -662,84 +642,6 @@ paths:
summary: 获取全国省份列表 [complete] summary: 获取全国省份列表 [complete]
tags: tags:
- 公用接口 - 公用接口
/phone20/online:
delete:
consumes:
- application/json
description: 主动关闭设备链接
parameters:
- description: 入参
in: body
name: ids
required: true
schema:
$ref: '#/definitions/dcphone20.reqIDs'
produces:
- application/json
responses:
"0":
description: 出参
schema:
$ref: '#/definitions/dcphone20.resGetOnlineList'
security:
- ApiKeyAuth: []
summary: 主动关闭设备链接[complete]
tags:
- phone20
/phone20/online/all:
get:
description: 查整个在线设备列表
produces:
- application/json
responses:
"0":
description: 出参
schema:
$ref: '#/definitions/dcphone20.resGetOnlineAll'
security:
- ApiKeyAuth: []
summary: 查整个在线设备列表[complete]
tags:
- phone20
/phone20/online/list:
get:
consumes:
- application/json
description: 根据设备ID,查询是否在线
parameters:
- description: 入参
in: body
name: ids
required: true
schema:
$ref: '#/definitions/dcphone20.reqIDs'
produces:
- application/json
responses:
"0":
description: 出参
schema:
$ref: '#/definitions/dcphone20.resGetOnlineList'
security:
- ApiKeyAuth: []
summary: 查设备是否在线[complete]
tags:
- phone20
/phone20/online/num:
get:
description: 查在线设备总数量
produces:
- application/json
responses:
"0":
description: 出参
schema:
$ref: '#/definitions/dcphone20.resGetOnlineTotal'
security:
- ApiKeyAuth: []
summary: 查在线设备总数量[complete]
tags:
- phone20
/phone20/para/:paraName: /phone20/para/:paraName:
get: get:
consumes: consumes:
......
package GrpcFromDeviceConn
import (
deviceConnServer "dc_golang_server_1/my_grpc/grpc_deviceConnServer"
"dc_golang_server_1/util/setting"
"google.golang.org/grpc"
)
var grpcConn *grpc.ClientConn
var Client deviceConnServer.DeviceConnClient
func Init() {
var err error
grpcConn, err = grpc.Dial(setting.GrpcFromDeviceConnServerIpPort, grpc.WithInsecure())
if err != nil {
panic(err)
}
Client = deviceConnServer.NewDeviceConnClient(grpcConn)
}
func CloseGrpc() {
if grpcConn != nil {
_ = grpcConn.Close()
}
}
package grpc_server package Grpc2Admin
import ( import (
"context" "context"
"dc_golang_server_1/data_db_cache/cache" "dc_golang_server_1/data_db_cache/cache"
"dc_golang_server_1/data_db_cache/model" "dc_golang_server_1/data_db_cache/model"
myGRPC "dc_golang_server_1/my_grpc/grpc_area_map" myGRPC "dc_golang_server_1/my_grpc/grpc_k122Server"
"errors" "errors"
) )
//protoc --go_out=. -I=C:/Users/Administrator/go/pkg/mod/github.com/protocolbuffers/protobuf@v3.19.1+incompatible/src -I=. google/protobuf/empty.proto --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./grpc_area_map/areaMap.proto //protoc --go_out=. -I=C:/Users/Administrator/go/pkg/mod/github.com/protocolbuffers/protobuf@v3.19.1+incompatible/src -I=. google/protobuf/empty.proto --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./grpc_area_map/areaMap.proto
type Server struct { type ToAdminServer struct {
myGRPC.UnimplementedMyGrpcServer myGRPC.UnimplementedGrpc2AdminServer
} }
func (s *Server) CacheAddArea( ctx context.Context,req *myGRPC.CacheAreaReq) (*myGRPC.Empty,error) { func (s *ToAdminServer) CacheAddArea(ctx context.Context, req *myGRPC.CacheAreaReq) (*myGRPC.Empty, error) {
if req == nil { if req == nil {
return new(myGRPC.Empty),errors.New("入参不能为空") return new(myGRPC.Empty), errors.New("入参不能为空")
} }
if req.AreaID == 0 { if req.AreaID == 0 {
return new(myGRPC.Empty),errors.New("校区ID错误") return new(myGRPC.Empty), errors.New("校区ID错误")
} }
if req.CountyID <543 || req.CountyID>3423 { if req.CountyID < 543 || req.CountyID > 3423 {
return new(myGRPC.Empty),errors.New("区县ID错误") return new(myGRPC.Empty), errors.New("区县ID错误")
} }
return new(myGRPC.Empty),cache.CreatAreaMapAndUpdateCountyAreaMap(req.AreaID,&model.CacheBAreaStruct{ return new(myGRPC.Empty), cache.CreatAreaMapAndUpdateCountyAreaMap(req.AreaID, &model.CacheBAreaStruct{
Name: req.Name, Name: req.Name,
Longitude: req.Longitude, Longitude: req.Longitude,
Latitude: req.Latitude, Latitude: req.Latitude,
CountyID: req.CountyID, CountyID: req.CountyID,
Status: uint8(req.Status), Status: uint8(req.Status),
}) })
} }
func (s *Server) CacheUpdateArea( ctx context.Context,req *myGRPC.CacheAreaReq) (*myGRPC.Empty,error) { func (s *ToAdminServer) CacheUpdateArea(ctx context.Context, req *myGRPC.CacheAreaReq) (*myGRPC.Empty, error) {
if req == nil { if req == nil {
return new(myGRPC.Empty),errors.New("入参不能为空") return new(myGRPC.Empty), errors.New("入参不能为空")
} }
//if req.AreaID == 0 { // 等那边保证数据正确 //if req.AreaID == 0 { // 等那边保证数据正确
// return new(myGRPC.Empty),errors.New("校区ID错误") // return new(myGRPC.Empty),errors.New("校区ID错误")
...@@ -44,11 +44,11 @@ func (s *Server) CacheUpdateArea( ctx context.Context,req *myGRPC.CacheAreaReq) ...@@ -44,11 +44,11 @@ func (s *Server) CacheUpdateArea( ctx context.Context,req *myGRPC.CacheAreaReq)
// return new(myGRPC.Empty),errors.New("区县ID错误") // return new(myGRPC.Empty),errors.New("区县ID错误")
//} //}
return new(myGRPC.Empty),cache.UpdateAreaMapAndUpdateCountyAreaMap(req.AreaID,&model.CacheBAreaStruct{ return new(myGRPC.Empty), cache.UpdateAreaMapAndUpdateCountyAreaMap(req.AreaID, &model.CacheBAreaStruct{
Name: req.Name, Name: req.Name,
Longitude: req.Longitude, Longitude: req.Longitude,
Latitude: req.Latitude, Latitude: req.Latitude,
CountyID: req.CountyID, CountyID: req.CountyID,
Status: uint8(req.Status), Status: uint8(req.Status),
}) })
} }
\ No newline at end of file
package grpc_server package Grpc2Admin
import ( import (
"context" "context"
"dc_golang_server_1/data_db_cache/cache" "dc_golang_server_1/data_db_cache/cache"
"dc_golang_server_1/data_db_cache/model" "dc_golang_server_1/data_db_cache/model"
myGRPC "dc_golang_server_1/my_grpc/grpc_area_map" myGRPC "dc_golang_server_1/my_grpc/grpc_k122Server"
"errors" "errors"
) )
//func (s *Server) CacheAddAreaService(ctx context.Context, req *myGRPC.CacheAreaServiceReq) (*myGRPC.Empty, error) { //func (s *ToAdminServer) CacheAddAreaService(ctx context.Context, req *myGRPC.CacheAreaServiceReq) (*myGRPC.Empty, error) {
// if req == nil { // if req == nil {
// return new(myGRPC.Empty), errors.New("入参不能为空") // return new(myGRPC.Empty), errors.New("入参不能为空")
// } // }
...@@ -39,7 +39,7 @@ import ( ...@@ -39,7 +39,7 @@ import (
// return new(myGRPC.Empty), cache.UpdateAreaMapAddOrDelAreaServiceList(req.AreaID, req.AreaServiceID,false) // return new(myGRPC.Empty), cache.UpdateAreaMapAddOrDelAreaServiceList(req.AreaID, req.AreaServiceID,false)
//} //}
func (s *Server) CacheAddAreaServicePhone(ctx context.Context, req *myGRPC.CacheAreaServicePhoneReq) (*myGRPC.Empty, error) { func (s *ToAdminServer) CacheAddAreaServicePhone(ctx context.Context, req *myGRPC.CacheAreaServicePhoneReq) (*myGRPC.Empty, error) {
if req == nil { if req == nil {
return new(myGRPC.Empty), errors.New("入参不能为空") return new(myGRPC.Empty), errors.New("入参不能为空")
} }
...@@ -63,16 +63,15 @@ func (s *Server) CacheAddAreaServicePhone(ctx context.Context, req *myGRPC.Cache ...@@ -63,16 +63,15 @@ func (s *Server) CacheAddAreaServicePhone(ctx context.Context, req *myGRPC.Cache
req.ServicePhone, req.ServicePhone,
req.ActivateCardFee, req.ActivateCardFee,
req.ReplacementCardFee, req.ReplacementCardFee,
}) })
if err != nil { if err != nil {
return new(myGRPC.Empty), err return new(myGRPC.Empty), err
} }
return new(myGRPC.Empty), cache.UpdateAreaMapAddOrDelAreaServiceList(req.AreaID, req.AreaServiceID,false) return new(myGRPC.Empty), cache.UpdateAreaMapAddOrDelAreaServiceList(req.AreaID, req.AreaServiceID, false)
} }
func (s *Server) CacheUpdateAreaServicePhone(ctx context.Context, req *myGRPC.CacheAreaServicePhoneReq) (*myGRPC.Empty, error) { func (s *ToAdminServer) CacheUpdateAreaServicePhone(ctx context.Context, req *myGRPC.CacheAreaServicePhoneReq) (*myGRPC.Empty, error) {
if req == nil { if req == nil {
return new(myGRPC.Empty), errors.New("入参不能为空") return new(myGRPC.Empty), errors.New("入参不能为空")
} }
...@@ -84,14 +83,14 @@ func (s *Server) CacheUpdateAreaServicePhone(ctx context.Context, req *myGRPC.Ca ...@@ -84,14 +83,14 @@ func (s *Server) CacheUpdateAreaServicePhone(ctx context.Context, req *myGRPC.Ca
} }
return new(myGRPC.Empty), cache.UpdateAreaServiceMapAndIfAreaIDChangeUpdateAreaMap(req.AreaServiceID, &model.CacheAreaServiceStruct{ return new(myGRPC.Empty), cache.UpdateAreaServiceMapAndIfAreaIDChangeUpdateAreaMap(req.AreaServiceID, &model.CacheAreaServiceStruct{
AreaID: req.AreaID, AreaID: req.AreaID,
ServiceType: uint8(req.ServiceType), ServiceType: uint8(req.ServiceType),
OperatorID: req.OperatorID, OperatorID: req.OperatorID,
Name: req.Name, Name: req.Name,
Status: uint8(req.Status), Status: uint8(req.Status),
PayAdminID: req.AllinPayID, PayAdminID: req.AllinPayID,
ServicePhone: req.ServicePhone, ServicePhone: req.ServicePhone,
ActivateCardFee: req.ActivateCardFee, ActivateCardFee: req.ActivateCardFee,
ReplacementCardFee: req.ReplacementCardFee, ReplacementCardFee: req.ReplacementCardFee,
}) })
} }
\ No newline at end of file
package Grpc2Admin
import (
"context"
"dc_golang_server_1/data_db_cache/cache"
"dc_golang_server_1/data_db_cache/model"
myGRPC "dc_golang_server_1/my_grpc/grpc_k122Server"
"errors"
)
func (s *ToAdminServer) CacheAddDevPhone20WhereAreaServiceIDNot0(ctx context.Context, reqs *myGRPC.CacheAddPhone20) (*myGRPC.Uint32S, error) {
if reqs.Rows == nil {
return nil, errors.New("入参不能为空")
}
res := new(myGRPC.Uint32S)
for _, req := range reqs.Rows {
if req.DevID == 0 {
continue
}
if req.AreaServiceID == 0 {
continue
}
if cache.CreatPhone20Map(req.DevID, &model.CachePhone20DeviceStruct{
AreaServiceID: req.AreaServiceID,
AllowCallTime: uint8(req.AllowCallTime),
PlaceUser: req.PlaceUser,
Status: req.Status,
}) {
res.Uint32S = append(res.Uint32S, req.DevID)
}
}
// fmt.Println(res.Uint32S)
return res, nil
}
//func (s *ToAdminServer) CheckDevPhone20Online(ctx context.Context,reqs *myGRPC.Uint32S) (*myGRPC.BoolS,error) {
// if reqs == nil {
// return nil,errors.New("入参不能为空")
// }
// res := new(myGRPC.BoolS)
// res.BoolS = make([]bool, len(reqs.Uint32S))
// for i,req := range reqs.Uint32S {
// if _, ok := dcphone20.TCP.ConnectMap.Load(req); ok {
// res.BoolS[i] = true
// }
// }
// return res,nil
//}
//
//func (s *ToAdminServer) GetDevPhone20OnlineList(ctx context.Context,reqs *myGRPC.Empty) (*myGRPC.Uint32S,error) {
// res := new(myGRPC.Uint32S)
// dcphone20.TCP.ConnectMap.Range(func(k, _ interface{}) bool {
// if d, ok := k.(uint32); ok { // 类型断言
// res.Uint32S = append(res.Uint32S, d) //strconv.FormatUint(uint64(d),16))
// } else {
// dcphone20.TCP.ConnectMap.Delete(k)
// // todo logger
// }
// return true
// })
// return res,nil
//}
func (s *ToAdminServer) CacheDeleteDevPhone20(ctx context.Context, reqs *myGRPC.Uint32S) (*myGRPC.Empty, error) {
for _, id := range reqs.Uint32S {
cache.DeletePhone20Map(id)
}
return new(myGRPC.Empty), nil
}
func (s *ToAdminServer) CacheAddDeviceUpdateFirmwareMapPhone20(ctx context.Context, reqs *myGRPC.CacheAddDeviceUpdateFirmwareMapPhone20Struct) (*myGRPC.Empty, error) {
if reqs == nil {
return nil, errors.New("入参不能为空")
}
cache.AddDeviceUpdateFirmwareMapPhone20(reqs.DevIDs, reqs.Firmware)
return new(myGRPC.Empty), nil
}
func (s *ToAdminServer) CacheDelDeviceUpdateFirmwareMapPhone20(ctx context.Context, reqs *myGRPC.Uint32S) (*myGRPC.Empty, error) {
cache.DelDeviceUpdateFirmwareMapPhone20(reqs.Uint32S)
return new(myGRPC.Empty), nil
}
package grpc_server package Grpc2Admin
import ( import (
"context" "context"
"dc_golang_server_1/data_db_cache/cache" "dc_golang_server_1/data_db_cache/cache"
"dc_golang_server_1/data_db_cache/model" "dc_golang_server_1/data_db_cache/model"
myGRPC "dc_golang_server_1/my_grpc/grpc_area_map" myGRPC "dc_golang_server_1/my_grpc/grpc_k122Server"
"errors" "errors"
) )
func (s *Server) CacheAddPhonePayList(ctx context.Context, req *myGRPC.CachePhonePayList) (*myGRPC.Empty, error) { func (s *ToAdminServer) CacheAddPhonePayList(ctx context.Context, req *myGRPC.CachePhonePayList) (*myGRPC.Empty, error) {
if req == nil { if req == nil {
return new(myGRPC.Empty), errors.New("入参不能为空") return new(myGRPC.Empty), errors.New("入参不能为空")
} }
...@@ -17,15 +17,15 @@ func (s *Server) CacheAddPhonePayList(ctx context.Context, req *myGRPC.CachePhon ...@@ -17,15 +17,15 @@ func (s *Server) CacheAddPhonePayList(ctx context.Context, req *myGRPC.CachePhon
} }
splitAmount := make([]model.PhonePaySplitMoneyStruct, len(req.SplitAmount)) splitAmount := make([]model.PhonePaySplitMoneyStruct, len(req.SplitAmount))
for i,v := range req.SplitAmount { for i, v := range req.SplitAmount {
splitAmount[i] = model.PhonePaySplitMoneyStruct{ splitAmount[i] = model.PhonePaySplitMoneyStruct{
AdminID: v.AdminID, AdminID: v.AdminID,
Amount: v.Amount, Amount: v.Amount,
Remark: v.Remark, Remark: v.Remark,
} }
} }
return new(myGRPC.Empty),cache.AddPhonePayListMap(req.AreaServiceID, &model.CacheAreaServicePhonePayListStruct{ return new(myGRPC.Empty), cache.AddPhonePayListMap(req.AreaServiceID, &model.CacheAreaServicePhonePayListStruct{
CacheAreaServicePhonePayBase: model.CacheAreaServicePhonePayBase{ CacheAreaServicePhonePayBase: model.CacheAreaServicePhonePayBase{
ID: req.ID, ID: req.ID,
Amount: req.Amount, Amount: req.Amount,
...@@ -34,11 +34,11 @@ func (s *Server) CacheAddPhonePayList(ctx context.Context, req *myGRPC.CachePhon ...@@ -34,11 +34,11 @@ func (s *Server) CacheAddPhonePayList(ctx context.Context, req *myGRPC.CachePhon
Describe: req.Describe, Describe: req.Describe,
}, },
SplitAmount: splitAmount, SplitAmount: splitAmount,
Status: req.Status, Status: req.Status,
}) })
} }
func (s *Server) CacheUpdatePhonePayList(ctx context.Context, req *myGRPC.CachePhonePayList) (*myGRPC.Empty, error) { func (s *ToAdminServer) CacheUpdatePhonePayList(ctx context.Context, req *myGRPC.CachePhonePayList) (*myGRPC.Empty, error) {
if req == nil { if req == nil {
return new(myGRPC.Empty), errors.New("入参不能为空") return new(myGRPC.Empty), errors.New("入参不能为空")
} }
...@@ -47,15 +47,15 @@ func (s *Server) CacheUpdatePhonePayList(ctx context.Context, req *myGRPC.CacheP ...@@ -47,15 +47,15 @@ func (s *Server) CacheUpdatePhonePayList(ctx context.Context, req *myGRPC.CacheP
} }
splitAmount := make([]model.PhonePaySplitMoneyStruct, len(req.SplitAmount)) splitAmount := make([]model.PhonePaySplitMoneyStruct, len(req.SplitAmount))
for i,v := range req.SplitAmount { for i, v := range req.SplitAmount {
splitAmount[i] = model.PhonePaySplitMoneyStruct{ splitAmount[i] = model.PhonePaySplitMoneyStruct{
AdminID: v.AdminID, AdminID: v.AdminID,
Amount: v.Amount, Amount: v.Amount,
Remark: v.Remark, Remark: v.Remark,
} }
} }
return new(myGRPC.Empty),cache.UpdatePhonePayListMap(req.AreaServiceID, &model.CacheAreaServicePhonePayListStruct{ return new(myGRPC.Empty), cache.UpdatePhonePayListMap(req.AreaServiceID, &model.CacheAreaServicePhonePayListStruct{
CacheAreaServicePhonePayBase: model.CacheAreaServicePhonePayBase{ CacheAreaServicePhonePayBase: model.CacheAreaServicePhonePayBase{
ID: req.ID, ID: req.ID,
Amount: req.Amount, Amount: req.Amount,
...@@ -64,11 +64,11 @@ func (s *Server) CacheUpdatePhonePayList(ctx context.Context, req *myGRPC.CacheP ...@@ -64,11 +64,11 @@ func (s *Server) CacheUpdatePhonePayList(ctx context.Context, req *myGRPC.CacheP
Describe: req.Describe, Describe: req.Describe,
}, },
SplitAmount: splitAmount, SplitAmount: splitAmount,
Status: req.Status, Status: req.Status,
}) })
} }
func (s *Server) CacheDelPhonePayList(ctx context.Context, req *myGRPC.CacheDelPhonePayListMsg) (*myGRPC.Empty, error) { func (s *ToAdminServer) CacheDelPhonePayList(ctx context.Context, req *myGRPC.CacheDelPhonePayListMsg) (*myGRPC.Empty, error) {
if req == nil { if req == nil {
return new(myGRPC.Empty), errors.New("入参不能为空") return new(myGRPC.Empty), errors.New("入参不能为空")
} }
...@@ -77,5 +77,5 @@ func (s *Server) CacheDelPhonePayList(ctx context.Context, req *myGRPC.CacheDelP ...@@ -77,5 +77,5 @@ func (s *Server) CacheDelPhonePayList(ctx context.Context, req *myGRPC.CacheDelP
} }
cache.DelPhonePayListMap(req.AreaServiceID, req.ID) cache.DelPhonePayListMap(req.AreaServiceID, req.ID)
return new(myGRPC.Empty),nil return new(myGRPC.Empty), nil
} }
\ No newline at end of file
package grpc_server package Grpc2Admin
import ( import (
"context" "context"
"dc_golang_server_1/data_db_cache/cache" "dc_golang_server_1/data_db_cache/cache"
"dc_golang_server_1/data_db_cache/model" "dc_golang_server_1/data_db_cache/model"
myGRPC "dc_golang_server_1/my_grpc/grpc_area_map" myGRPC "dc_golang_server_1/my_grpc/grpc_k122Server"
"errors" "errors"
"time" "time"
) )
func (s *Server) CacheAddSimInfoNoBindStudentAndFamily(ctx context.Context, reqs *myGRPC.CacheAddNewSim) (*myGRPC.Strings, error) { func (s *ToAdminServer) CacheAddSimInfoNoBindStudentAndFamily(ctx context.Context, reqs *myGRPC.CacheAddNewSim) (*myGRPC.Strings, error) {
if reqs.Rows == nil { if reqs.Rows == nil {
return nil, errors.New("入参不能为空") return nil, errors.New("入参不能为空")
} }
...@@ -44,7 +44,7 @@ func (s *Server) CacheAddSimInfoNoBindStudentAndFamily(ctx context.Context, reqs ...@@ -44,7 +44,7 @@ func (s *Server) CacheAddSimInfoNoBindStudentAndFamily(ctx context.Context, reqs
return res, nil return res, nil
} }
func (s *Server) CacheDeleteSimInfo(ctx context.Context, reqs *myGRPC.Strings) (*myGRPC.Empty, error) { func (s *ToAdminServer) CacheDeleteSimInfo(ctx context.Context, reqs *myGRPC.Strings) (*myGRPC.Empty, error) {
cache.DeleteSimInfoMap(reqs.Strings) cache.DeleteSimInfoMap(reqs.Strings)
return new(myGRPC.Empty), nil return new(myGRPC.Empty), nil
} }
package grpc_server package Grpc2Admin
import ( import (
"context" "context"
"dc_golang_server_1/data_db_cache/cache" "dc_golang_server_1/data_db_cache/cache"
myGRPC "dc_golang_server_1/my_grpc/grpc_area_map" myGRPC "dc_golang_server_1/my_grpc/grpc_k122Server"
"errors" "errors"
) )
func (s *Server) CacheUpdateUWeCustomerTestRole( ctx context.Context,req *myGRPC.CacheUWeCustomerTestRole) (*myGRPC.Empty,error) { func (s *ToAdminServer) CacheUpdateUWeCustomerTestRole(ctx context.Context, req *myGRPC.CacheUWeCustomerTestRole) (*myGRPC.Empty, error) {
if req == nil { if req == nil {
return new(myGRPC.Empty),errors.New("入参不能为空") return new(myGRPC.Empty), errors.New("入参不能为空")
} }
if req.ID == 0 { // if req.ID == 0 { //
return new(myGRPC.Empty),errors.New("用户ID错误") return new(myGRPC.Empty), errors.New("用户ID错误")
} }
return new(myGRPC.Empty),cache.UpdateUWeCustomerMapTestRole(req.ID,req.TestRole) return new(myGRPC.Empty), cache.UpdateUWeCustomerMapTestRole(req.ID, req.TestRole)
} }
\ No newline at end of file
package Grpc2Phone20TcpConn
import (
"context"
"dc_golang_server_1/my_grpc/grpc_k122Server"
"errors"
)
type ToTcpConnServer struct {
k122Server.UnimplementedGrpc2TcpConnServer
ReceiveResponse func(data []byte) (uint32, []byte, error)
}
func (s *ToTcpConnServer) ReceiveTcpCallback(ctx context.Context, req *k122Server.ReceiveTcpCallbackReq) (*k122Server.ReceiveTcpCallbackRes, error) {
if req == nil {
return nil, errors.New("入参不能为空")
}
res := new(k122Server.ReceiveTcpCallbackRes)
var err error
res.DeviceID, res.SendData, err = s.ReceiveResponse(req.Data)
return res, err
}
package grpc_server
import (
"context"
"dc_golang_server_1/data_db_cache/cache"
"dc_golang_server_1/data_db_cache/model"
"dc_golang_server_1/dev_product/dcphone20"
myGRPC "dc_golang_server_1/my_grpc/grpc_area_map"
"errors"
)
func (s *Server) CacheAddDevPhone20WhereAreaServiceIDNot0( ctx context.Context,reqs *myGRPC.CacheAddPhone20) (*myGRPC.Uint32S,error) {
if reqs.Rows == nil {
return nil,errors.New("入参不能为空")
}
res := new(myGRPC.Uint32S)
for _,req := range reqs.Rows {
if req.DevID == 0 {
continue
}
if req.AreaServiceID == 0 {
continue
}
if cache.CreatPhone20Map(req.DevID,&model.CachePhone20DeviceStruct{
AreaServiceID: req.AreaServiceID,
AllowCallTime: uint8(req.AllowCallTime),
PlaceUser: req.PlaceUser,
Status: req.Status,
}) {
res.Uint32S = append(res.Uint32S,req.DevID)
}
}
// fmt.Println(res.Uint32S)
return res,nil
}
func (s *Server) CheckDevPhone20Online(ctx context.Context,reqs *myGRPC.Uint32S) (*myGRPC.BoolS,error) {
if reqs == nil {
return nil,errors.New("入参不能为空")
}
res := new(myGRPC.BoolS)
res.BoolS = make([]bool, len(reqs.Uint32S))
for i,req := range reqs.Uint32S {
if _, ok := dcphone20.TCP.ConnectMap.Load(req); ok {
res.BoolS[i] = true
}
}
return res,nil
}
func (s *Server) GetDevPhone20OnlineList(ctx context.Context,reqs *myGRPC.Empty) (*myGRPC.Uint32S,error) {
res := new(myGRPC.Uint32S)
dcphone20.TCP.ConnectMap.Range(func(k, _ interface{}) bool {
if d, ok := k.(uint32); ok { // 类型断言
res.Uint32S = append(res.Uint32S, d) //strconv.FormatUint(uint64(d),16))
} else {
dcphone20.TCP.ConnectMap.Delete(k)
// todo logger
}
return true
})
return res,nil
}
func (s *Server) CacheDeleteDevPhone20(ctx context.Context,reqs *myGRPC.Uint32S) (*myGRPC.Empty,error) {
for _,id := range reqs.Uint32S {
cache.DeletePhone20Map(id)
}
return new(myGRPC.Empty),nil
}
func (s *Server) CacheAddDeviceUpdateFirmwareMapPhone20(ctx context.Context,reqs *myGRPC.CacheAddDeviceUpdateFirmwareMapPhone20Struct) (*myGRPC.Empty,error) {
if reqs == nil {
return nil,errors.New("入参不能为空")
}
cache.AddDeviceUpdateFirmwareMapPhone20(reqs.DevIDs,reqs.Firmware)
return new(myGRPC.Empty),nil
}
func (s *Server) CacheDelDeviceUpdateFirmwareMapPhone20(ctx context.Context,reqs *myGRPC.Uint32S) (*myGRPC.Empty,error) {
cache.DelDeviceUpdateFirmwareMapPhone20(reqs.Uint32S)
return new(myGRPC.Empty),nil
}
\ No newline at end of file
...@@ -5,9 +5,9 @@ import ( ...@@ -5,9 +5,9 @@ import (
"dc_golang_server_1/data_db_cache/cache" "dc_golang_server_1/data_db_cache/cache"
"dc_golang_server_1/data_db_cache/dbcurd" "dc_golang_server_1/data_db_cache/dbcurd"
"dc_golang_server_1/dev_product/dcphone20" "dc_golang_server_1/dev_product/dcphone20"
"dc_golang_server_1/grpc_server" "dc_golang_server_1/grpc_server/Grpc2Admin"
"dc_golang_server_1/logger" "dc_golang_server_1/logger"
myGRPC "dc_golang_server_1/my_grpc/grpc_area_map" myGRPC "dc_golang_server_1/my_grpc/grpc_k122Server"
"dc_golang_server_1/util/setting" "dc_golang_server_1/util/setting"
"fmt" "fmt"
"google.golang.org/grpc" "google.golang.org/grpc"
...@@ -32,6 +32,7 @@ import ( ...@@ -32,6 +32,7 @@ import (
// @Description /we/pay 接口调整 // @Description /we/pay 接口调整
// @Description /we/payrecord 接口调整 // @Description /we/payrecord 接口调整
// @Description /we/payrecord/{aid} [GET] 接口增加字段 // @Description /we/payrecord/{aid} [GET] 接口增加字段
// @Description 2022-02-26 /serverops/sysstate [GET] 取消PhoneTcpSocketNo字段,在adminServer去增加,因为连接硬件的服务从本服务剥离出去了
// @securityDefinitions.apikey ApiKeyAuth // @securityDefinitions.apikey ApiKeyAuth
// @in header // @in header
// @name token // @name token
...@@ -66,7 +67,7 @@ func main() { // ...@@ -66,7 +67,7 @@ func main() { //
panic(err) panic(err)
} }
s := grpc.NewServer() s := grpc.NewServer()
myGRPC.RegisterMyGrpcServer(s, &grpc_server.Server{}) myGRPC.RegisterGrpc2AdminServer(s, &Grpc2Admin.ToAdminServer{})
err = s.Serve(l) err = s.Serve(l)
if err != nil { if err != nil {
panic(err) panic(err)
......
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./grpc_area_map/areaMap.proto protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./grpc_k122Server/k122Server.proto ./grpc_deviceConnServer/deviceConnServer.proto
\ No newline at end of file \ No newline at end of file
syntax = "proto3";
option go_package = "./deviceConnServer";
package deviceConnServer;
// 硬件连接服务的GPRC
message Empty{}
message Uint32s {
repeated uint32 uint32s = 1;
}
message BoolS {
repeated bool boolS = 1;
}
message SendMsgToDeviceReq {
uint32 DevID = 1;
bytes Data = 2;
}
message SendMsgToDeviceRes {
bool Res = 1;
}
message Int32 {
int32 Data = 1;
}
service DeviceConn{
rpc SendMsgToDevice(SendMsgToDeviceReq) returns(SendMsgToDeviceRes); // 发送数据
rpc CheckDeviceOnline(Uint32s) returns(BoolS); // 拿devIDs来查设备是否在线,返回boolS
rpc GetDeviceOnlineList(Empty) returns(Uint32s); // 查询所有在线的ID,无序列表
rpc GetSocketConnNum(Empty) returns(Int32); // 查询硬件socket连接数
}
\ No newline at end of file
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
package deviceConnServer
import (
context "context"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
)
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.32.0 or later.
const _ = grpc.SupportPackageIsVersion7
// DeviceConnClient is the client API for DeviceConn service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type DeviceConnClient interface {
SendMsgToDevice(ctx context.Context, in *SendMsgToDeviceReq, opts ...grpc.CallOption) (*SendMsgToDeviceRes, error)
CheckDeviceOnline(ctx context.Context, in *Uint32S, opts ...grpc.CallOption) (*BoolS, error)
GetDeviceOnlineList(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Uint32S, error)
GetSocketConnNum(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Int32, error)
}
type deviceConnClient struct {
cc grpc.ClientConnInterface
}
func NewDeviceConnClient(cc grpc.ClientConnInterface) DeviceConnClient {
return &deviceConnClient{cc}
}
func (c *deviceConnClient) SendMsgToDevice(ctx context.Context, in *SendMsgToDeviceReq, opts ...grpc.CallOption) (*SendMsgToDeviceRes, error) {
out := new(SendMsgToDeviceRes)
err := c.cc.Invoke(ctx, "/deviceConnServer.DeviceConn/SendMsgToDevice", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *deviceConnClient) CheckDeviceOnline(ctx context.Context, in *Uint32S, opts ...grpc.CallOption) (*BoolS, error) {
out := new(BoolS)
err := c.cc.Invoke(ctx, "/deviceConnServer.DeviceConn/CheckDeviceOnline", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *deviceConnClient) GetDeviceOnlineList(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Uint32S, error) {
out := new(Uint32S)
err := c.cc.Invoke(ctx, "/deviceConnServer.DeviceConn/GetDeviceOnlineList", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *deviceConnClient) GetSocketConnNum(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Int32, error) {
out := new(Int32)
err := c.cc.Invoke(ctx, "/deviceConnServer.DeviceConn/GetSocketConnNum", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// DeviceConnServer is the server API for DeviceConn service.
// All implementations must embed UnimplementedDeviceConnServer
// for forward compatibility
type DeviceConnServer interface {
SendMsgToDevice(context.Context, *SendMsgToDeviceReq) (*SendMsgToDeviceRes, error)
CheckDeviceOnline(context.Context, *Uint32S) (*BoolS, error)
GetDeviceOnlineList(context.Context, *Empty) (*Uint32S, error)
GetSocketConnNum(context.Context, *Empty) (*Int32, error)
mustEmbedUnimplementedDeviceConnServer()
}
// UnimplementedDeviceConnServer must be embedded to have forward compatible implementations.
type UnimplementedDeviceConnServer struct {
}
func (UnimplementedDeviceConnServer) SendMsgToDevice(context.Context, *SendMsgToDeviceReq) (*SendMsgToDeviceRes, error) {
return nil, status.Errorf(codes.Unimplemented, "method SendMsgToDevice not implemented")
}
func (UnimplementedDeviceConnServer) CheckDeviceOnline(context.Context, *Uint32S) (*BoolS, error) {
return nil, status.Errorf(codes.Unimplemented, "method CheckDeviceOnline not implemented")
}
func (UnimplementedDeviceConnServer) GetDeviceOnlineList(context.Context, *Empty) (*Uint32S, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetDeviceOnlineList not implemented")
}
func (UnimplementedDeviceConnServer) GetSocketConnNum(context.Context, *Empty) (*Int32, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetSocketConnNum not implemented")
}
func (UnimplementedDeviceConnServer) mustEmbedUnimplementedDeviceConnServer() {}
// UnsafeDeviceConnServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to DeviceConnServer will
// result in compilation errors.
type UnsafeDeviceConnServer interface {
mustEmbedUnimplementedDeviceConnServer()
}
func RegisterDeviceConnServer(s grpc.ServiceRegistrar, srv DeviceConnServer) {
s.RegisterService(&DeviceConn_ServiceDesc, srv)
}
func _DeviceConn_SendMsgToDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SendMsgToDeviceReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DeviceConnServer).SendMsgToDevice(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/deviceConnServer.DeviceConn/SendMsgToDevice",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DeviceConnServer).SendMsgToDevice(ctx, req.(*SendMsgToDeviceReq))
}
return interceptor(ctx, in, info, handler)
}
func _DeviceConn_CheckDeviceOnline_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Uint32S)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DeviceConnServer).CheckDeviceOnline(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/deviceConnServer.DeviceConn/CheckDeviceOnline",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DeviceConnServer).CheckDeviceOnline(ctx, req.(*Uint32S))
}
return interceptor(ctx, in, info, handler)
}
func _DeviceConn_GetDeviceOnlineList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DeviceConnServer).GetDeviceOnlineList(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/deviceConnServer.DeviceConn/GetDeviceOnlineList",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DeviceConnServer).GetDeviceOnlineList(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
func _DeviceConn_GetSocketConnNum_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DeviceConnServer).GetSocketConnNum(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/deviceConnServer.DeviceConn/GetSocketConnNum",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DeviceConnServer).GetSocketConnNum(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
// DeviceConn_ServiceDesc is the grpc.ServiceDesc for DeviceConn service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var DeviceConn_ServiceDesc = grpc.ServiceDesc{
ServiceName: "deviceConnServer.DeviceConn",
HandlerType: (*DeviceConnServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "SendMsgToDevice",
Handler: _DeviceConn_SendMsgToDevice_Handler,
},
{
MethodName: "CheckDeviceOnline",
Handler: _DeviceConn_CheckDeviceOnline_Handler,
},
{
MethodName: "GetDeviceOnlineList",
Handler: _DeviceConn_GetDeviceOnlineList_Handler,
},
{
MethodName: "GetSocketConnNum",
Handler: _DeviceConn_GetSocketConnNum_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "grpc_deviceConnServer/deviceConnServer.proto",
}
syntax = "proto3"; syntax = "proto3";
// protoc --go_out=. -I=E:/Go/project/pkg/mod/github.com/protocolbuffers/protobuf@v3.19.1+incompatible/src -I=. google/protobuf/empty.proto --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./grpc_area_map/areaMap.proto option go_package = "./k122Server";
// import "google/protobuf/empty.proto";
// option go_package="./;my_grpc";
option go_package = "./my_grpc";
package my_grpc; package my_grpc;
...@@ -102,9 +98,9 @@ message Uint32s { ...@@ -102,9 +98,9 @@ message Uint32s {
repeated uint32 uint32s = 1; repeated uint32 uint32s = 1;
} }
message BoolS { //message BoolS {
repeated bool boolS = 1; // repeated bool boolS = 1;
} //}
message Strings { message Strings {
repeated string strings = 1; repeated string strings = 1;
...@@ -112,7 +108,7 @@ message Strings { ...@@ -112,7 +108,7 @@ message Strings {
message Empty{} message Empty{}
service MyGrpc{ service Grpc2Admin{
// area // area
rpc CacheAddArea(CacheAreaReq) returns(Empty); rpc CacheAddArea(CacheAreaReq) returns(Empty);
rpc CacheUpdateArea(CacheAreaReq) returns(Empty); rpc CacheUpdateArea(CacheAreaReq) returns(Empty);
...@@ -137,11 +133,24 @@ service MyGrpc{ ...@@ -137,11 +133,24 @@ service MyGrpc{
// dev_phone20 // dev_phone20
rpc CacheAddDevPhone20WhereAreaServiceIDNot0(CacheAddPhone20) returns(Uint32s); rpc CacheAddDevPhone20WhereAreaServiceIDNot0(CacheAddPhone20) returns(Uint32s);
rpc CheckDevPhone20Online(Uint32s) returns(BoolS); // 拿devIDs来查设备是否在线,返回boolS // rpc CheckDevPhone20Online(Uint32s) returns(BoolS); // 拿devIDs来查设备是否在线,返回boolS
rpc GetDevPhone20OnlineList(Empty) returns(Uint32s); // 查询所有在线的ID,无序列表 // rpc GetDevPhone20OnlineList(Empty) returns(Uint32s); // 查询所有在线的ID,无序列表
rpc CacheDeleteDevPhone20(Uint32s) returns(Empty); // 删除缓存的devPhone20设备,允许传入缓存里面没有的ID,反正只要有就会删 rpc CacheDeleteDevPhone20(Uint32s) returns(Empty); // 删除缓存的devPhone20设备,允许传入缓存里面没有的ID,反正只要有就会删
// dev_firmware_phone20 // dev_firmware_phone20
rpc CacheAddDeviceUpdateFirmwareMapPhone20(CacheAddDeviceUpdateFirmwareMapPhone20Struct) returns(Empty); rpc CacheAddDeviceUpdateFirmwareMapPhone20(CacheAddDeviceUpdateFirmwareMapPhone20Struct) returns(Empty);
rpc CacheDelDeviceUpdateFirmwareMapPhone20(Uint32s) returns(Empty); rpc CacheDelDeviceUpdateFirmwareMapPhone20(Uint32s) returns(Empty);
}
message ReceiveTcpCallbackReq {
bytes Data = 1;
}
message ReceiveTcpCallbackRes {
uint32 DeviceID = 1;
bytes SendData = 2;
}
service Grpc2TcpConn{
rpc ReceiveTcpCallback(ReceiveTcpCallbackReq) returns(ReceiveTcpCallbackRes);
} }
\ No newline at end of file
...@@ -3,10 +3,15 @@ package setting ...@@ -3,10 +3,15 @@ package setting
import ( import (
"go.uber.org/zap/zapcore" "go.uber.org/zap/zapcore"
"gopkg.in/ini.v1" "gopkg.in/ini.v1"
"time"
) )
var ( var (
TokenKEY string
Grpc2AdminListenPort string
Grpc2TcpConnListenPort string
GrpcFromDeviceConnServerIpPort string
AllinPayAdminHead string AllinPayAdminHead string
AllinPayCustomerHead string AllinPayCustomerHead string
...@@ -23,12 +28,6 @@ var ( ...@@ -23,12 +28,6 @@ var (
// HttpSSL bool // HttpSSL bool
// HttpServerSwagger bool // HttpServerSwagger bool
TcpLongPort string
TcpLongMaxConnections int32
TcpLongNewConnReadDeadline time.Duration
TcpLongNewConnRightfulTimeout int64
TcpLongOldConnReadDeadline time.Duration
SmsCaptchaUrl string SmsCaptchaUrl string
FirmwareServerUrl string FirmwareServerUrl string
...@@ -59,6 +58,16 @@ func Init() { ...@@ -59,6 +58,16 @@ func Init() {
panic("配置文件读取错误") panic("配置文件读取错误")
} }
TokenKEY = file.Section("token").Key("KEY").String()
if len(TokenKEY) != 16 {
panic("配置文件读取错误:token:KEY 长度错误")
}
Grpc2AdminListenPort = file.Section("grpc_server").Key("Grpc2AdminListenPort").String()
Grpc2TcpConnListenPort = file.Section("grpc_server").Key("Grpc2TcpConnListenPort").String()
GrpcFromDeviceConnServerIpPort = file.Section("grpc_client").Key("GrpcFromDeviceConnServerIpPort").String()
AllinPayAdminHead = file.Section("allin_pay").Key("AdminHead").MustString("K12B") AllinPayAdminHead = file.Section("allin_pay").Key("AdminHead").MustString("K12B")
AllinPayCustomerHead = file.Section("allin_pay").Key("CustomerHead").MustString("K12U") AllinPayCustomerHead = file.Section("allin_pay").Key("CustomerHead").MustString("K12U")
...@@ -68,16 +77,7 @@ func Init() { ...@@ -68,16 +77,7 @@ func Init() {
HttpServerMainHost = file.Section("http_server").Key("MainHost").MustString("k12m.dcrym.com") HttpServerMainHost = file.Section("http_server").Key("MainHost").MustString("k12m.dcrym.com")
// HttpServerMode = file.Section("http_server").Key("ServerMode").In("release", []string{"release", "debug"})
HttpServerPort = file.Section("http_server").Key("ServerPort").MustString(":50000") HttpServerPort = file.Section("http_server").Key("ServerPort").MustString(":50000")
// HttpSSL = file.Section("http_server").Key("HttpSSL").MustBool(false)
// HttpServerSwagger = file.Section("http_server").Key("Swagger").MustBool(false)
TcpLongPort = file.Section("tcp_long_server").Key("TcpPort").MustString("60000")
TcpLongMaxConnections = int32(file.Section("tcp_long_server").Key("MaxConnections").MustUint(20000))
TcpLongNewConnReadDeadline = time.Duration(file.Section("tcp_long_server").Key("NewConnReadDeadline").MustInt(60)) * time.Second
TcpLongNewConnRightfulTimeout = file.Section("tcp_long_server").Key("NewConnRightfulTimeout").MustInt64(120)
TcpLongOldConnReadDeadline = time.Duration(file.Section("tcp_long_server").Key("OldConnReadDeadline").MustInt(180)) * time.Second
SmsCaptchaUrl = file.Section("sms_captcha").Key("url").MustString("127.0.0.1:50003") SmsCaptchaUrl = file.Section("sms_captcha").Key("url").MustString("127.0.0.1:50003")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment