diff --git a/lsdb/Lsdb.go b/lsdb/Lsdb.go index 657f38f..59feb74 100644 --- a/lsdb/Lsdb.go +++ b/lsdb/Lsdb.go @@ -18,6 +18,7 @@ import ( "mlsr/communication" "mlsr/lsa" "mlsr/lsdb/LsaContainer" + "mlsr/utils" "time" ) @@ -60,6 +61,9 @@ type Lsdb struct { isBuildAdjLsaScheduled bool // 是否安排构建邻接LSA adjBuildCount uint64 // 邻接LSA的构建的统计数目 + + // 信号:用以通知“Lsdb被修改”这个事件的发生 + onLsdbModified *utils.Signal } func (l *Lsdb) Init(mc *common.MlsrConfig, ms *MlsrScheduler, @@ -102,6 +106,9 @@ func (l *Lsdb) Init(mc *common.MlsrConfig, ms *MlsrScheduler, // 构建并安装自己的名称LSA l.BuildAndInstallOwnNameLsa() + + // 信号初始化 + l.onLsdbModified = utils.NewSignal() } // @@ -303,8 +310,8 @@ func (l *Lsdb) InstallLsa(lsa lsa.ILsa) { common2.LogError("Add Lsa error", lsa.ToString()) return } - // 2. 触发LSDB安装LSA的动作信号 - // todo: onLsdbModified(lsa, LsdbUpdate::INSTALLED, {}, {}); + // 2. 触发LSDB安装LSA的动作信号 onLsdbModified(lsa, LsdbUpdate::INSTALLED, {}, {}); + l.onLsdbModified.Emit(lsa, INSTALLED) // 3. 设置LSA超期时间事件 l.ScheduleLsaExpiration(lsa, timeToExpire) } else if lsaInDb.GetSeqNo() < lsa.GetSeqNo() { @@ -316,14 +323,32 @@ func (l *Lsdb) InstallLsa(lsa lsa.ILsa) { common2.LogError("Add Lsa error", lsa.ToString()) return } - // 2. 触发LSDB更新LSA的动作信号 - // todo: onLsdbModified(lsa, LsdbUpdate::UPDATED, namesToAdd, namesToRemove); + // 2. 触发LSDB更新LSA的动作信号 onLsdbModified(lsa, LsdbUpdate::UPDATED, namesToAdd, namesToRemove); + // todo 实现该方法:对比两个lsa,将其不同的部分取出来 + updated, namesToAdd, namesToRemove := l.compareTwoLsa(lsaInDb, lsa) + if updated { + l.onLsdbModified.Emit(lsa, UPDATED, namesToAdd, namesToRemove) + } // 3. 设置LSA超期时间事件 l.ScheduleLsaExpiration(lsa, timeToExpire) common2.LogDebug("Updated Lsa ", lsa.ToString()) } } +// +// compareTwoLsa +// @Description: 对比两个lsa,将其不同的部分取出来 +// @receiver l +// @param lsaA +// @param lsaB +// @return bool +// @return []*component.Identifier +// @return []component.Identifier +// +func (l *Lsdb) compareTwoLsa(lsaA lsa.ILsa, lsaB lsa.ILsa) (bool, []*component.Identifier, []component.Identifier) { + return true, nil, nil +} + // // RemoveLsa // @Description: 从LSDB中删除LSA @@ -336,6 +361,7 @@ func (l *Lsdb) RemoveLsa(lsa lsa.ILsa) { common2.LogError("") return } + l.onLsdbModified.Emit(lsa, REMOVED) common2.LogDebug("Removed LSA: ", lsa.ToString()) }