临时提交

This commit is contained in:
刘祥超
2020-07-21 11:18:47 +08:00
commit 219732c1df
32 changed files with 729 additions and 0 deletions

View File

@@ -0,0 +1,81 @@
package nodes
import (
"errors"
"github.com/TeaOSLab/EdgeNode/internal/configs"
"sync"
)
type Listener struct {
group *configs.ServerGroup
locker sync.RWMutex
}
func NewListener() *Listener {
return &Listener{}
}
func (this *Listener) Reload(group *configs.ServerGroup) {
this.locker.Lock()
defer this.locker.Unlock()
this.group = group
}
func (this *Listener) FullAddr() string {
if this.group != nil {
return this.group.FullAddr()
}
return ""
}
func (this *Listener) Listen() error {
if this.group == nil {
return nil
}
protocol := this.group.Protocol()
switch protocol {
case configs.ProtocolHTTP:
return this.listenHTTP()
case configs.ProtocolHTTPS:
return this.ListenHTTPS()
case configs.ProtocolTCP:
return this.listenTCP()
case configs.ProtocolTLS:
return this.listenTLS()
case configs.ProtocolUnix:
return this.listenUnix()
case configs.ProtocolUDP:
return this.listenUDP()
default:
return errors.New("unknown protocol '" + protocol + "'")
}
}
func (this *Listener) Close() error {
// TODO 需要实现
return nil
}
func (this *Listener) listenHTTP() error {
return nil
}
func (this *Listener) ListenHTTPS() error {
return nil
}
func (this *Listener) listenTCP() error {
return nil
}
func (this *Listener) listenTLS() error {
return nil
}
func (this *Listener) listenUnix() error {
return nil
}
func (this *Listener) listenUDP() error {
return nil
}

View File

@@ -0,0 +1,63 @@
package nodes
import (
"github.com/TeaOSLab/EdgeNode/internal/configs"
"github.com/iwind/TeaGo/lists"
"github.com/iwind/TeaGo/logs"
"sync"
)
var sharedListenerManager = NewListenerManager()
type ListenerManager struct {
listenersMap map[string]*Listener // addr => *Listener
locker sync.Mutex
}
func NewListenerManager() *ListenerManager {
return &ListenerManager{
listenersMap: map[string]*Listener{},
}
}
func (this *ListenerManager) Start(node *configs.NodeConfig) error {
this.locker.Lock()
defer this.locker.Unlock()
// 所有的新地址
groupAddrs := []string{}
for _, group := range node.AvailableGroups() {
addr := group.FullAddr()
groupAddrs = append(groupAddrs, addr)
}
// 停掉老的
for _, listener := range this.listenersMap {
addr := listener.FullAddr()
if !lists.ContainsString(groupAddrs, addr) {
logs.Println("[LISTENER_MANAGER]close '" + addr + "'")
_ = listener.Close()
}
}
// 启动新的或修改老的
for _, group := range node.AvailableGroups() {
addr := group.FullAddr()
listener, ok := this.listenersMap[addr]
if ok {
logs.Println("[LISTENER_MANAGER]reload '" + addr + "'")
listener.Reload(group)
} else {
logs.Println("[LISTENER_MANAGER]listen '" + addr + "'")
listener = NewListener()
listener.Reload(group)
err := listener.Listen()
if err != nil {
return err
}
this.listenersMap[addr] = listener
}
}
return nil
}

View File

@@ -0,0 +1,55 @@
package nodes
import (
"github.com/TeaOSLab/EdgeNode/internal/configs"
"testing"
)
func TestListenerManager_Listen(t *testing.T) {
manager := NewListenerManager()
err := manager.Start(&configs.NodeConfig{
Servers: []*configs.ServerConfig{
{
IsOn: true,
HTTP: &configs.HTTPProtocolConfig{
IsOn: true,
Listen: []string{"127.0.0.1:1234"},
},
},
{
IsOn: true,
HTTP: &configs.HTTPProtocolConfig{
IsOn: true,
Listen: []string{"127.0.0.1:1235"},
},
},
},
})
if err != nil {
t.Fatal(err)
}
err = manager.Start(&configs.NodeConfig{
Servers: []*configs.ServerConfig{
{
IsOn: true,
HTTP: &configs.HTTPProtocolConfig{
IsOn: true,
Listen: []string{"127.0.0.1:1234"},
},
},
{
IsOn: true,
HTTP: &configs.HTTPProtocolConfig{
IsOn: true,
Listen: []string{"127.0.0.1:1236"},
},
},
},
})
if err != nil {
t.Fatal(err)
}
t.Log("all ok")
}

26
internal/nodes/node.go Normal file
View File

@@ -0,0 +1,26 @@
package nodes
import (
"github.com/TeaOSLab/EdgeNode/internal/configs"
"github.com/iwind/TeaGo/logs"
)
var sharedNodeConfig *configs.NodeConfig = nil
type Node struct {
}
func NewNode() *Node {
return &Node{}
}
func (this *Node) Start() {
nodeConfig, err := configs.SharedNodeConfig()
if err != nil {
logs.Println("[NODE]start failed: read node config failed: " + err.Error())
return
}
sharedNodeConfig = nodeConfig
logs.PrintAsJSON(nodeConfig)
}

View File

@@ -0,0 +1,11 @@
package nodes
import (
_ "github.com/iwind/TeaGo/bootstrap"
"testing"
)
func TestNode(t *testing.T) {
node := NewNode()
node.Start()
}

View File

@@ -0,0 +1,4 @@
package nodes
type OriginServer struct {
}

View File

@@ -0,0 +1,4 @@
package nodes
type Request struct {
}