当前位置:   article > 正文

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

「连载」边缘计算(二十一)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调用剖析就全部结束了。

未完待续…… 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/154396
推荐阅读
相关标签
  

闽ICP备14008679号