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.
 
 

106 lines
2.9 KiB

package main
import (
"context"
clientv3 "go.etcd.io/etcd/client/v3"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"sonet/internal/gateway_ws/gws_server"
"sonet/internal/postal/group"
"sonet/internal/postal/logic"
"sonet/pkg/config"
"sonet/pkg/grpc/client"
"sonet/pkg/grpc/discovery"
"sonet/pkg/grpc/discovery/etcd"
"sonet/pkg/grpc/generic"
"sonet/pkg/plugins/mq"
"sonet/pkg/protocol/deliver"
"sonet/pkg/protocol/session"
"sonet/pkg/utils/collect"
"sonet/pkg/utils/shutdown"
)
type GatewayWsConfig struct {
HttpPort int
EndpointAddress string
SubjectCacheTopic string
SubjectLrcExpiration string
SubjectLrcCleanupInterval string
}
// websocket server with postalService
func main() {
appConf := &GatewayWsConfig{}
conf := config.LoadConfig(appConf, "cmd/gateway_ws")
// registry and run
etcdClient, err := clientv3.New(conf.Etcd)
if err != nil {
panic(err)
}
shutdown.AddHook(func() { _ = etcdClient.Close() }, shutdown.WithOrderBack())
dis := discovery.NewEtcdDiscovery(etcdClient)
etcdResolver, err := dis.Resolver()
if err != nil {
panic(err)
}
grpcFactory := generic.NewGpcGenericClientFactory(
discovery.EtcdSchema,
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithResolvers(etcdResolver),
)
grpcFactory.Init()
sessionStore := session.NewMapStore(128)
groupStore := collect.NewConcurrentMap[string, *group.Group](128, func(k string) string { return k })
// run websocket server
postalAddr := etcd.MustRegisterAddress(conf.Grpc.Address)
//connHandler := server.NewConnHandler(postalAddr, grpcFactory, sessionStore, subjectStore)
//httpServer := server.NewHttpServer(connHandler)
gwsHandler := gws_server.NewGwsHandler(postalAddr, grpcFactory, sessionStore)
httpServer := gws_server.NewGwsServer(gwsHandler)
httpServer.Init()
go func() {
err = httpServer.Run(appConf.HttpPort)
if err != nil {
panic(err)
}
}()
// run postal cluster server
ctx, cancel := context.WithCancel(context.Background())
shutdown.AddHook(cancel)
postalPicker := deliver.NewPostalPicker(dis, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err = postalPicker.Init(ctx); err != nil {
panic(err)
}
clientFactory := client.NewGrpcDirectClientFactory(grpc.WithTransportCredentials(insecure.NewCredentials()))
postalClusterServer := logic.NewPostalClusterServer(sessionStore, postalPicker, clientFactory)
go func() {
err := postalClusterServer.Run(conf.Grpc.Address, config.GetGrpcOptions(conf.Grpc)...)
if err != nil {
panic(err)
}
}()
// run postal server
// nats mq
producer, err := mq.NewNatsProducer(conf.Nats)
if err != nil {
panic(err)
}
shutdown.AddHook(producer.Stop)
postalServer := logic.NewPostalServer(appConf.EndpointAddress, sessionStore, groupStore, postalClusterServer, producer)
go func() {
err = postalServer.Run(conf.Grpc, dis)
if err != nil {
panic(err)
}
}()
shutdown.Await()
}