ergo

Форк
0
/
ergo.go 
70 строк · 2.3 Кб
1
package ergo
2

3
import (
4
	"context"
5

6
	"github.com/ergo-services/ergo/apps/cloud"
7
	"github.com/ergo-services/ergo/apps/erlang"
8
	"github.com/ergo-services/ergo/apps/system"
9
	"github.com/ergo-services/ergo/gen"
10
	"github.com/ergo-services/ergo/lib"
11
	"github.com/ergo-services/ergo/node"
12
	"github.com/ergo-services/ergo/proto/dist"
13
)
14

15
// StartNode create new node with name and cookie string
16
func StartNode(name string, cookie string, opts node.Options) (node.Node, error) {
17
	return StartNodeWithContext(context.Background(), name, cookie, opts)
18
}
19

20
// StartNodeWithContext create new node with specified context, name and cookie string
21
func StartNodeWithContext(ctx context.Context, name string, cookie string, opts node.Options) (node.Node, error) {
22
	version := node.Version{
23
		Release: Version,
24
		Prefix:  VersionPrefix,
25
		OTP:     VersionOTP,
26
	}
27
	if opts.Env == nil {
28
		opts.Env = make(map[gen.EnvKey]interface{})
29
	}
30
	opts.Env[node.EnvKeyVersion] = version
31

32
	// add default applications:
33
	defaultApps := []gen.ApplicationBehavior{
34
		system.CreateApp(opts.System), // system application (bus, metrics etc.)
35
		erlang.CreateApp(),            // erlang support
36
	}
37

38
	// add cloud support if it's enabled
39
	if opts.Cloud.Enable {
40
		cloudApp := cloud.CreateApp(opts.Cloud)
41
		defaultApps = append(defaultApps, cloudApp)
42
		if opts.Proxy.Accept == false {
43
			lib.Warning("Disabled option Proxy.Accept makes this node inaccessible to the other nodes within your cloud cluster, but it still allows initiate connection to the others with this option enabled.")
44
		}
45
	}
46
	opts.Applications = append(defaultApps, opts.Applications...)
47

48
	if opts.Handshake == nil {
49
		// create default handshake for the node (Erlang Dist Handshake)
50
		opts.Handshake = dist.CreateHandshake(dist.HandshakeOptions{})
51
	}
52

53
	if opts.Proto == nil {
54
		// create default proto handler (Erlang Dist Proto)
55
		protoOptions := node.DefaultProtoOptions()
56
		opts.Proto = dist.CreateProto(protoOptions)
57
	}
58

59
	if opts.StaticRoutesOnly == false && opts.Registrar == nil {
60
		// create default registrar (with enabled Erlang EPMD server)
61
		opts.Registrar = dist.CreateRegistrarWithLocalEPMD("", dist.DefaultEPMDPort)
62
	}
63

64
	if len(opts.Listeners) == 0 {
65
		listener := node.DefaultListener()
66
		opts.Listeners = append(opts.Listeners, listener)
67
	}
68

69
	return node.StartWithContext(ctx, name, cookie, opts)
70
}
71

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.