-
Notifications
You must be signed in to change notification settings - Fork 0
/
builder.go
73 lines (56 loc) · 2.01 KB
/
builder.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package ws_gateway
import (
"context"
"errors"
_pubsub "github.com/dacalin/ws_gateway/adapters/pubsub/redis"
_gws_lib "github.com/dacalin/ws_gateway/adapters/ws_server/gws"
_gws_hub "github.com/dacalin/ws_gateway/adapters/ws_server/gws/hub"
"github.com/dacalin/ws_gateway/gateway"
_logger "github.com/dacalin/ws_gateway/logger"
_igateway "github.com/dacalin/ws_gateway/ports/gateway"
_ipubsub "github.com/dacalin/ws_gateway/ports/pubsub"
_iserver "github.com/dacalin/ws_gateway/ports/server"
"github.com/go-redis/redis/v8"
"log"
"strconv"
"strings"
"time"
)
func configPubSubDriver(config Config, ctx context.Context) (_ipubsub.Client, error) {
redisAddress := config.GWSDriver.PubSub.Host + ":" + strconv.Itoa(config.GWSDriver.PubSub.Port)
var redisClient = redis.NewClient(&redis.Options{
Addr: redisAddress,
Password: config.GWSDriver.PubSub.Password,
Username: config.GWSDriver.PubSub.User,
ReadTimeout: 0,
PoolSize: 100,
PoolTimeout: 60 * time.Second,
})
cmdResp := redisClient.Ping(ctx)
if cmdResp.Err() != nil {
log.Fatal(cmdResp.Err())
return nil, cmdResp.Err()
}
pubsubClient := _pubsub.NewClient(redisClient, ctx)
return pubsubClient, nil
}
func configGWSDriver(config Config, ctx context.Context) (_iserver.Server, _igateway.Gateway, error) {
_logger.New(config.EnableDebugLog)
var pubsubClient, pubsubErr = configPubSubDriver(config, ctx)
if pubsubErr != nil {
return nil, nil, pubsubErr
}
hub := _gws_hub.New(pubsubClient)
connectionGateway := gateway.New(hub)
server := _gws_lib.Create(config.GWSDriver.WSRoute, config.GWSDriver.PingIntervalSeconds, pubsubClient, config.CertFile, config.KeyFile)
return server, connectionGateway, nil
}
func Create(config Config, ctx context.Context) (_iserver.Server, _igateway.Gateway, error) {
switch strings.ToUpper(config.Driver) {
case "GWS":
server, connGW, err := configGWSDriver(config, ctx)
return server, connGW, err
default:
return nil, nil, errors.New("WSGateway::Unsupported Driver " + config.Driver)
}
}