98 lines
2.2 KiB
Go
98 lines
2.2 KiB
Go
package service
|
|
|
|
import (
|
|
"github.com/fox/fox/etcd"
|
|
"github.com/fox/fox/log"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
GameSrv = "game"
|
|
NatsAddress = "nats://192.168.232.128:4222"
|
|
EtcdAddress = "192.168.232.128:2379"
|
|
EtcdAddress2 = "114.132.124.145:2379"
|
|
NatsAddress2 = "nats://114.132.124.145:4222"
|
|
)
|
|
|
|
func newGameService() *gameService {
|
|
_ = NatsAddress2
|
|
_ = NatsAddress
|
|
_ = EtcdAddress2
|
|
_ = EtcdAddress
|
|
|
|
var err error
|
|
s := new(gameService)
|
|
if s.NatsService, err = NewNatsService(GameSrv, "1", s, NatsAddress2); err != nil {
|
|
log.Fatal(err.Error())
|
|
return nil
|
|
}
|
|
if s.etcdService, err = etcd.NewRegistry[etcd.ServiceNode]([]string{EtcdAddress2}, etcd.ServiceNode{}.EtcdRootKey(), "", ""); err != nil {
|
|
log.Error(err.Error())
|
|
s.NatsService.OnStop()
|
|
return nil
|
|
}
|
|
endpoint := &etcd.ServiceNode{
|
|
Name: s.Name(),
|
|
Type: s.Type(),
|
|
Address: "",
|
|
Port: 0,
|
|
Version: "",
|
|
ServiceType: etcd.Unique,
|
|
}
|
|
if err = s.etcdService.Register(endpoint); err != nil {
|
|
log.Error(err.Error())
|
|
s.NatsService.OnStop()
|
|
return nil
|
|
}
|
|
s.OnInit()
|
|
return s
|
|
}
|
|
|
|
type gameService struct {
|
|
*NatsService
|
|
etcdService *etcd.Registry[etcd.ServiceNode]
|
|
etcdTopic *etcd.Registry[etcd.TopicNode]
|
|
srvTopic string
|
|
}
|
|
|
|
func (s *gameService) OnInit() {
|
|
s.etcdService.WatchServices()
|
|
s.etcdTopic.WatchServices()
|
|
if err := s.NatsService.Subscribe(Topic(s)); err != nil {
|
|
log.Error(err.Error())
|
|
}
|
|
if err := s.NatsService.QueueSubscribe(GroupTopic(s), GroupQueue(s)); err != nil {
|
|
log.Error(err.Error())
|
|
}
|
|
log.Debug("onInit")
|
|
}
|
|
|
|
func (s *gameService) OnStop() {
|
|
s.etcdService.UnregisterService()
|
|
s.etcdService.UnregisterService()
|
|
s.NatsService.OnStop()
|
|
log.Debug("OnStop")
|
|
}
|
|
|
|
func (s *gameService) OnMessage(msg []byte) error {
|
|
log.Debug(s.Log("on message:%v", string(msg)))
|
|
return nil
|
|
}
|
|
|
|
func TestGameService(t *testing.T) {
|
|
log.Open("test.log", log.DebugL)
|
|
s := newGameService()
|
|
msg := "hello world"
|
|
if err := s.Send(Topic(s), []byte(msg)); err != nil {
|
|
log.Error(err.Error())
|
|
}
|
|
for _, srv := range s.etcdService.GetNodes() {
|
|
log.Debug(s.Log("发现有服务:%v", srv))
|
|
}
|
|
time.Sleep(1 * time.Second)
|
|
s.NotifyStop()
|
|
s.WaitStop()
|
|
log.Debug("exit")
|
|
}
|