You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.4 KiB
59 lines
1.4 KiB
package main |
|
|
|
import ( |
|
"context" |
|
clientv3 "go.etcd.io/etcd/client/v3" |
|
"google.golang.org/grpc" |
|
"google.golang.org/grpc/credentials/insecure" |
|
"sonet/api/gen/chat" |
|
"sonet/internal/chat/logic" |
|
"sonet/pkg/config" |
|
"sonet/pkg/grpc/discovery" |
|
"sonet/pkg/plugins/mq" |
|
"sonet/pkg/protocol/deliver" |
|
"sonet/pkg/utils/shutdown" |
|
) |
|
|
|
func main() { |
|
conf := config.LoadConfig(nil, "cmd/chat") |
|
|
|
// registry and run... |
|
etcdClient, err := clientv3.New(conf.Etcd) |
|
if err != nil { |
|
panic(err) |
|
} |
|
shutdown.AddHook(func() { |
|
if err := etcdClient.Close(); err != nil { |
|
panic(err) |
|
} |
|
}, shutdown.WithOrderBack()) |
|
|
|
// etcd discovery |
|
dis := discovery.NewEtcdDiscovery(etcdClient) |
|
|
|
ctx, cancel := context.WithCancel(context.Background()) |
|
shutdown.AddHook(cancel) |
|
picker := deliver.NewPostalPicker(dis, grpc.WithTransportCredentials(insecure.NewCredentials())) |
|
if err = picker.Init(ctx); err != nil { |
|
panic(err) |
|
} |
|
deli := deliver.NewDeliver(chat.Chat_ServiceDesc.ServiceName, picker) |
|
consumer, err := mq.NewNatsConsumer(conf.Nats) |
|
if err != nil { |
|
panic(err) |
|
} |
|
groupDeli := deliver.NewGroupDeliver(chat.Chat_ServiceDesc.ServiceName, picker, logic.NewRoomLoader(), consumer) |
|
if err := groupDeli.Init(ctx); err != nil { |
|
panic(err) |
|
} |
|
chatServer := logic.NewChatServer(deli, groupDeli) |
|
|
|
go func() { |
|
err = chatServer.Run(conf.Grpc, dis) |
|
if err != nil { |
|
panic(err) |
|
} |
|
}() |
|
|
|
shutdown.Await() |
|
}
|
|
|