mirror of
https://gitee.com/willfree/mlsr.git
synced 2026-10-04 19:42:02 +08:00
增加Lsdb中对于lsdb被修改的事件
This commit is contained in:
1 parent
fa7c41e4fb
commit
ab3f87bcee
1 file changed
+30
-4
+30
-4
@@ -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())
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user