core.go 1.3 KB
Newer Older
J
Jason 已提交
1
package core
J
Jason 已提交
2

J
Jason 已提交
3
import (
J
顶替  
Jason 已提交
4
	"errors"
5
	"git.zgwit.com/zgwit/iot-admin/db"
6
	"git.zgwit.com/zgwit/iot-admin/models"
7
	"log"
J
Jason 已提交
8 9
	"sync"
)
J
 
Jason 已提交
10

J
顶替  
Jason 已提交
11
var channels sync.Map
J
 
Jason 已提交
12

13 14
func Tunnels() []Tunnel {
	cs := make([]Tunnel, 0)
J
顶替  
Jason 已提交
15
	channels.Range(func(key, value interface{}) bool {
16
		cs = append(cs, value.(Tunnel))
J
顶替  
Jason 已提交
17 18 19
		return true
	})
	return cs
J
Jason 已提交
20 21
}

J
Jason 已提交
22
func Recovery() error {
J
优化  
Jason 已提交
23
	var cs []models.Tunnel
24
	err := db.Engine.Find(&cs)
J
Jason 已提交
25 26 27 28
	if err != nil {
		return err
	}

J
Jason 已提交
29
	for _, c := range cs {
30 31 32 33
		//if !c.Disabled {
		_, err = StartTunnel(&c)
		if err != nil {
			log.Println(err)
J
顶替  
Jason 已提交
34
		}
35
		//}
J
Jason 已提交
36 37 38
	}

	return nil
J
Jason 已提交
39
}
J
Jason 已提交
40

J
Jason 已提交
41
func StartTunnel(c *models.Tunnel) (Tunnel, error) {
J
Jason 已提交
42
	//log.Println("Start core", c)
43
	tunnel, err := NewTunnel(c)
J
Jason 已提交
44 45 46
	if err != nil {
		return nil, err
	}
47
	err = tunnel.Open()
48 49
	if err != nil {
		return nil, err
J
Jason 已提交
50
	}
51 52
	channels.Store(c.Id, tunnel)
	return tunnel, err
J
Jason 已提交
53 54
}

55
func DeleteTunnel(id int) error {
J
Jason 已提交
56 57 58 59 60
	v, ok := channels.Load(id)
	if !ok {
		return errors.New("通道不存在")
	}
	channels.Delete(id)
61
	return v.(Tunnel).Close()
J
Jason 已提交
62 63
}

64
func GetTunnel(id int64) (Tunnel, error) {
J
顶替  
Jason 已提交
65 66 67 68
	v, ok := channels.Load(id)
	if !ok {
		return nil, errors.New("通道不存在")
	}
69
	return v.(Tunnel), nil
J
顶替  
Jason 已提交
70
}
J
枯在  
Jason 已提交
71

72 73
func GetLink(channelId, linkId int64) (*Link, error) {
	channel, err := GetTunnel(channelId)
J
枯在  
Jason 已提交
74 75 76 77 78
	if err != nil {
		return nil, err
	}
	return channel.GetLink(linkId)
}