|
|
@@ -4,16 +4,15 @@ import (
|
|
4
|
4
|
"errors"
|
|
5
|
5
|
)
|
|
6
|
6
|
|
|
|
7
|
+// Structure for managing subscriptions
|
|
7
|
8
|
type sub_manager struct {
|
|
8
|
|
- list topicList
|
|
9
|
|
-
|
|
10
|
|
- /* Manage sub# */
|
|
11
|
|
- count_sub int // Subscription #
|
|
12
|
|
- emptylist []int // To administrate sub #
|
|
13
|
|
- ip2sub map[string][]int // ip2sub[ip] = sub# ...
|
|
14
|
|
- sub2ip map[int]string // sub2ip[sub#] = ip
|
|
15
|
|
- sub2node map[int][]nodeInfo // sub2node[sub#] = node_addr ...
|
|
16
|
|
- israngesub map[int]bool // To manage when deleted
|
|
|
9
|
+ list topicList // Data Structure for Manage TopicNode
|
|
|
10
|
+ count_sub int // Subscription#
|
|
|
11
|
+ emptylist []int // For administrate Subscription#(Deleted)
|
|
|
12
|
+ ip2sub map[string][]int // For mapping {ip : Sub#s List}
|
|
|
13
|
+ sub2ip map[int]string // For mapping {Sub# : ip}
|
|
|
14
|
+ sub2node map[int][]nodeInfo // For mapping {Sub# : NodeInfo List}
|
|
|
15
|
+ israngesub map[int]bool // To manage when deleted
|
|
17
|
16
|
}
|
|
18
|
17
|
|
|
19
|
18
|
type nodeInfo struct{
|
|
|
@@ -180,6 +179,7 @@ func (manager *sub_manager) addSubscription(msg MsgUnit) error {
|
|
180
|
179
|
}
|
|
181
|
180
|
addValNodeList = append(addValNodeList, valptr)
|
|
182
|
181
|
manager.sub2node[subnumber] = append(manager.sub2node[subnumber], nodeInfo{addValNodeList, topic})
|
|
|
182
|
+ manager.israngesub[subnumber] = false
|
|
183
|
183
|
valptr.insertSub(operator[0], subnumber, true)
|
|
184
|
184
|
return nil // AddSubscription ok
|
|
185
|
185
|
} else {
|
|
|
@@ -214,6 +214,7 @@ func (manager *sub_manager) addSubscription(msg MsgUnit) error {
|
|
214
|
214
|
|
|
215
|
215
|
} else {
|
|
216
|
216
|
// if they are enclosed in '||' -> Insert Value to single_operator_list
|
|
|
217
|
+ manager.israngesub[subnumber] = false
|
|
217
|
218
|
valptr1.insertSub(operator[0], subnumber, true)
|
|
218
|
219
|
valptr2.insertSub(operator[2], subnumber, true)
|
|
219
|
220
|
}
|
|
|
@@ -235,6 +236,7 @@ func (manager *sub_manager) delete(from string) error {
|
|
235
|
236
|
for j := 0; j < len(manager.sub2node[sub]); j++ {
|
|
236
|
237
|
nodeinfo := manager.sub2node[sub][j]
|
|
237
|
238
|
node := nodeinfo.valNodeList
|
|
|
239
|
+
|
|
238
|
240
|
if manager.israngesub[sub] {
|
|
239
|
241
|
for k := 0; k < len(node); k++ {
|
|
240
|
242
|
pos := findSub(node[k].range2sub_s, sub)
|
|
|
@@ -260,17 +262,6 @@ func (manager *sub_manager) delete(from string) error {
|
|
260
|
262
|
node[k].range2sub_eb = remove(node[k].range2sub_eb, pos)
|
|
261
|
263
|
manager.emptylist = append(manager.emptylist, sub)
|
|
262
|
264
|
}
|
|
263
|
|
-
|
|
264
|
|
- isempty := node[k].isEmpty()
|
|
265
|
|
-
|
|
266
|
|
- // Delete if Value Node is empty
|
|
267
|
|
- if isempty && node[k] != nil {
|
|
268
|
|
- prev_node := node[k].prev
|
|
269
|
|
- next_node := node[k].next
|
|
270
|
|
-
|
|
271
|
|
- prev_node.next = node[k].next
|
|
272
|
|
- next_node.prev = node[k].prev
|
|
273
|
|
- }
|
|
274
|
265
|
}
|
|
275
|
266
|
} else {
|
|
276
|
267
|
for k := 0; k < len(node); k++ {
|
|
|
@@ -304,16 +295,6 @@ func (manager *sub_manager) delete(from string) error {
|
|
304
|
295
|
manager.emptylist = append(manager.emptylist, sub)
|
|
305
|
296
|
}
|
|
306
|
297
|
|
|
307
|
|
- isempty := node[k].isEmpty()
|
|
308
|
|
-
|
|
309
|
|
- // Delete if Value Node is empty
|
|
310
|
|
- if isempty && node[k] != nil {
|
|
311
|
|
- prevNode := node[k].prev
|
|
312
|
|
- nextNode := node[k].next
|
|
313
|
|
-
|
|
314
|
|
- prevNode.next = node[k].next
|
|
315
|
|
- nextNode.prev = node[k].prev
|
|
316
|
|
- }
|
|
317
|
298
|
}
|
|
318
|
299
|
}
|
|
319
|
300
|
}
|