service.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package service
  2. import (
  3. "bet24.com/log"
  4. "bet24.com/servers/coreservice/servicesink/client"
  5. "bet24.com/utils"
  6. "context"
  7. "encoding/json"
  8. "errors"
  9. "fmt"
  10. "net"
  11. )
  12. var Addr string
  13. var _sink IServiceSink
  14. func Run(port int, sink IServiceSink) bool {
  15. if utils.CheckPortInUse(port) {
  16. log.Release("servicesink.Run port[%d] in use", port)
  17. return false
  18. }
  19. if sink == nil {
  20. log.Release("servicesink.Run sink == nil")
  21. return false
  22. }
  23. Addr = fmt.Sprintf("%s:%d", getMyIP(), port)
  24. _sink = sink
  25. return true
  26. }
  27. func getMyIP() string {
  28. addrs, err := net.InterfaceAddrs()
  29. if err != nil {
  30. fmt.Println(err)
  31. return ""
  32. }
  33. for _, address := range addrs {
  34. // 检查ip地址判断是否回环地址
  35. if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
  36. if ipnet.IP.To4() != nil {
  37. return ipnet.IP.String()
  38. }
  39. }
  40. }
  41. return ""
  42. }
  43. type Server int
  44. func (s *Server) OnNotification(ctx context.Context, args *client.Request, reply *client.Reply) error {
  45. var req client.Request_Notification
  46. if err := json.Unmarshal([]byte(args.Data), &req); err != nil {
  47. log.Debug("Server.OnNotification unmarshal fail %v", err)
  48. return errors.New("unmarshal error")
  49. }
  50. _sink.OnNotification(req.UserId, req.Data)
  51. return nil
  52. }