「连载」边缘计算(二十一)02-26:边缘部分源码(源码分析篇)

(接上篇)

DeviceTwin struct组成剖析

该部分对DeviceTwin struct的组成进行剖析。接着devicetwin struct调用剖析的实例化DeviceTwin struct(dt := DeviceTwin{})往下剖析,进入DeviceTwin struct的定义,具体如下所示。

KubeEdge/edge/pkg/devicetwin/devicetwin.go

//DeviceTwin the module

type DeviceTwin struct {

context      *context.Context

dtcontroller *DTController

}

DeviceTwin struct的定义 *context.Context 和 *DTController两部分组成。其中,*context.Context可以参考8.3.2,这里不再赘述。下面重点剖析DTController

DTController的定义具体如下所示。

KubeEdge/edge/pkg/devicetwin/dtcontroller.go

//DTController controller for devicetwin

type DTController struct {

HeartBeatToModule map[string]chan interface{}

DTContexts        *dtcontext.DTContext

DTModules         map[string]dtmodule.DTModule

Stop              chan bool

}

DTController struct定义中发现\*dtcontext.DTContextdtmodule.DTModule的定义具体如下所示。

KubeEdge/edge/pkg/devicetwin/dtcontext/dtcontext.go

//DTContext context for devicetwin

type DTContext struct {

GroupID        string

NodeID         string

CommChan       map[string]chan interface{}

ConfirmChan    chan interface{}

ConfirmMap     *sync.Map

ModulesHealth  *sync.Map

ModulesContext *context.Context

DeviceList     *sync.Map

DeviceMutex    *sync.Map

Mutex          *sync.RWMutex

// DBConn *dtclient.Conn

State string

}

DTContext struct的定义可以看出,DTContext struct主要用来实现devicetwin的通信和缓存。DTModule.DTModule struct定义如下所示。

KubeEdge/edge/pkg/devicetwin/dtmodule/dtmodule.go

//DTModule module for devicetwin

type DTModule struct {

Name   string

Worker dtmanager.DTWorker

}

在 DTModule struct定义中,dtmanager.DTWorker是interface type,定义如下所示。

KubeEdge/edge/pkg/devicetwin/dtmanager/dtworker.go

//DTWorker worker for devicetwin

type DTWorker interface {

Start()

}

dtmanager.DTWorker的interface type可以推测DTModule有多种类型,而且都实现了DTWorker interface。KubeEdge/edge/pkg/devicetwin/dtmodule/dtmodule.go中的InitWorker()就是用来实例化DTModule的多种类型的,具体定义如下所示。

KubeEdge/edge/pkg/devicetwin/dtmodule/dtmodule.go

// InitWorker init worker

func (dm *DTModule) InitWorker(recv chan interface{}, confirm chan interface{}, heartBeat chan interface{}, dtContext *dtcontext.DTContext) {

switch dm.Name {

case dtcommon.MemModule:

dm.Worker = dtmanager.MemWorker{

Group: dtcommon.MemModule,

Worker: dtmanager.Worker{

ReceiverChan:  recv,

ConfirmChan:   confirm,

HeartBeatChan: heartBeat,

DTContexts:    dtContext,

},

}

...

}

InitWorker()函数的定义中可以梳理出,DTModuleMemWorkerTwinWorkerDeviceWorkerCommWorker四种类型。

到此,EdgeCoredevicetwin的struct调用剖析就全部结束了。

未完待续…… 

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值