-
Notifications
You must be signed in to change notification settings - Fork 0
/
factoryHost.go
72 lines (64 loc) · 2.64 KB
/
factoryHost.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
package factory
import (
"github.com/Dharitri-org/drtg-communication/websocket"
"github.com/Dharitri-org/drtg-communication/websocket/client"
"github.com/Dharitri-org/drtg-communication/websocket/data"
"github.com/Dharitri-org/drtg-communication/websocket/server"
"github.com/Dharitri-org/drtg-core/core"
"github.com/Dharitri-org/drtg-core/marshal"
)
// ArgsWebSocketHost holds all the arguments needed in order to create a FullDuplexHost
type ArgsWebSocketHost struct {
WebSocketConfig data.WebSocketConfig
Marshaller marshal.Marshalizer
Log core.Logger
}
// CreateWebSocketHost will create and start a new instance of factory.FullDuplexHost
func CreateWebSocketHost(args ArgsWebSocketHost) (FullDuplexHost, error) {
switch args.WebSocketConfig.Mode {
case data.ModeServer:
return createWebSocketServer(args)
case data.ModeClient:
return createWebSocketClient(args)
default:
return nil, data.ErrInvalidWebSocketHostMode
}
}
func createWebSocketClient(args ArgsWebSocketHost) (FullDuplexHost, error) {
payloadConverter, err := websocket.NewWebSocketPayloadConverter(args.Marshaller)
if err != nil {
return nil, err
}
return client.NewWebSocketClient(client.ArgsWebSocketClient{
RetryDurationInSeconds: args.WebSocketConfig.RetryDurationInSec,
WithAcknowledge: args.WebSocketConfig.WithAcknowledge,
URL: args.WebSocketConfig.URL,
PayloadConverter: payloadConverter,
Log: args.Log,
BlockingAckOnError: args.WebSocketConfig.BlockingAckOnError,
DropMessagesIfNoConnection: args.WebSocketConfig.DropMessagesIfNoConnection,
AckTimeoutInSeconds: args.WebSocketConfig.AcknowledgeTimeoutInSec,
PayloadVersion: args.WebSocketConfig.Version,
})
}
func createWebSocketServer(args ArgsWebSocketHost) (FullDuplexHost, error) {
payloadConverter, err := websocket.NewWebSocketPayloadConverter(args.Marshaller)
if err != nil {
return nil, err
}
host, err := server.NewWebSocketServer(server.ArgsWebSocketServer{
RetryDurationInSeconds: args.WebSocketConfig.RetryDurationInSec,
WithAcknowledge: args.WebSocketConfig.WithAcknowledge,
URL: args.WebSocketConfig.URL,
PayloadConverter: payloadConverter,
Log: args.Log,
BlockingAckOnError: args.WebSocketConfig.BlockingAckOnError,
DropMessagesIfNoConnection: args.WebSocketConfig.DropMessagesIfNoConnection,
AckTimeoutInSeconds: args.WebSocketConfig.AcknowledgeTimeoutInSec,
PayloadVersion: args.WebSocketConfig.Version,
})
if err != nil {
return nil, err
}
return host, nil
}