client.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package global
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "sync"
  7. "github.com/mitchellh/mapstructure"
  8. )
  9. type LoginRedis struct {
  10. LoginID string `json:"loginId" redis:"loginId"` // 登陆账号
  11. UserID string `json:"userId" redis:"userId"` // 用户ID
  12. SessionID string `json:"sessionId" redis:"sessionId"` // 终端sid
  13. Token string `json:"token" redis:"token"` // 令牌
  14. Group string `json:"group" redis:"group"` // 终端分组
  15. Addr string `json:"addr" redis:"addr"` // 客户端地址信息 // FIXME: 由于本服务改用短连,所以每次提交请交请求可能会不一样,后期可判断是否在中间件中进行拦截
  16. }
  17. // FromMap Map to Struct
  18. func (r *LoginRedis) FromMap(val map[string]interface{}) error {
  19. return mapstructure.Decode(val, r)
  20. }
  21. // ToMap Struct to Map
  22. func (r *LoginRedis) ToMap() (val map[string]interface{}, err error) {
  23. if marshalContent, err := json.Marshal(r); err != nil {
  24. return nil, err
  25. } else {
  26. d := json.NewDecoder(bytes.NewReader(marshalContent))
  27. d.UseNumber() // 设置将float64转为一个number
  28. if err := d.Decode(&val); err != nil {
  29. fmt.Println(err)
  30. } else {
  31. for k, v := range val {
  32. val[k] = v
  33. }
  34. }
  35. }
  36. return
  37. }
  38. type Client struct {
  39. LoginRedis
  40. CurSerialNumber uint32 // 当前业务流水号
  41. }
  42. // MQPacket 与总线交互的数据体
  43. type MQPacket struct {
  44. FunCode uint32 // 功能码
  45. SessionId uint32 // 数据包的sid
  46. Data []byte // 业务数据体
  47. }
  48. // AsyncTask 异步任务结构体
  49. type AsyncTask struct {
  50. Packet chan MQPacket // 总线数据处理通道
  51. SerialNumber uint32 // 通信流水号
  52. doClose sync.Once // 仅关闭通道一次
  53. }
  54. // Run 启动异步任务
  55. func (r *AsyncTask) Run() (p *MQPacket, isTimeOut bool) {
  56. select {}
  57. return
  58. }
  59. // close 结束异步任务的方法
  60. // func (r *AsyncTask) close() {
  61. // r.doClose.Do(
  62. // func() {
  63. // close(r.C) // FIXME: - 注意这里是否可以close,后期处理
  64. // }
  65. // )
  66. // }