link.go 879 字节
Newer Older
J
Jason 已提交
1 2
package dtu

J
Jason 已提交
3 4 5 6
import (
	"github.com/zgwit/dtu-admin/storage"
	"sync"
)
J
 
Jason 已提交
7 8


J
Jason 已提交
9
var channels *sync.Map
J
Jason 已提交
10
var connections *sync.Map
J
 
Jason 已提交
11 12

func init() {
J
Jason 已提交
13
	channels = new(sync.Map)
J
Jason 已提交
14
	connections = new(sync.Map)
J
 
Jason 已提交
15 16
}

J
Jason 已提交
17 18
func Channels() *sync.Map {
	return channels
J
Jason 已提交
19 20
}

J
Jason 已提交
21 22 23 24
func Connections() *sync.Map  {
	return connections
}

J
Jason 已提交
25 26 27
func Recovery() error {
	var cs []storage.Channel
	err := storage.ChannelDB().All(&cs)
J
Jason 已提交
28 29 30 31
	if err != nil {
		return err
	}

J
Jason 已提交
32
	for _, c := range cs {
J
Jason 已提交
33
		_, _ = startChannel(&c)
J
Jason 已提交
34 35 36
	}

	return nil
J
Jason 已提交
37
}
J
Jason 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

func startChannel(c *storage.Channel) (*Channel, error) {
	channel := NewChannel(c)
	err := channel.Open()
	if err != nil && channel != nil {
		channel.Error = err.Error()
	}
	channels.Store(c.ID, channel)
	return channel, err
}

func CreateChannel(c *storage.Channel) (*Channel, error)  {
	err := storage.ChannelDB().Save(c)
	if err != nil {
		return nil, err
	}
	return startChannel(c)
}