Procházet zdrojové kódy

[fix] valptr, intersect issue

master
extra1563 před 4 roky
rodič
revize
0c2b9e9d06
1 změnil soubory, kde provedl 35 přidání a 31 odebrání
  1. 35
    31
      src/broker/modules/matching.go

+ 35
- 31
src/broker/modules/matching.go Zobrazit soubor

4
 	"errors"
4
 	"errors"
5
 	_ "errors"
5
 	_ "errors"
6
 	"github.com/juliangruber/go-intersect"
6
 	"github.com/juliangruber/go-intersect"
7
+	"reflect"
7
 )
8
 )
8
 
9
 
9
 type match_manager struct {
10
 type match_manager struct {
10
-	match_count int
11
+	match_count	int
11
 }
12
 }
12
 
13
 
13
-// Returns a list of IP addresses of matched subs
14
+// Matching -> Return (list of IP addresses of matched subs, Pub Msg, error)
14
 func (match_mng *match_manager) Matching(queue *MsgQueue, sub_mng *sub_manager) ([]string, MsgUnit, error) {
15
 func (match_mng *match_manager) Matching(queue *MsgQueue, sub_mng *sub_manager) ([]string, MsgUnit, error) {
15
 	msg := queue.pop(true)
16
 	msg := queue.pop(true)
16
-	topic := msg.(*PublishMsg).Topic
17
-	value := msg.(*PublishMsg).Value
17
+	topic := msg.(*PublishMsg).topic
18
+	value := msg.(*PublishMsg).value
18
 
19
 
19
 	// list
20
 	// list
20
 	ret := make([]string, 0)
21
 	ret := make([]string, 0)
23
 	big := make([]int, 0)
24
 	big := make([]int, 0)
24
 	small := make([]int, 0)
25
 	small := make([]int, 0)
25
 
26
 
26
-	// 1. Find (topicNode[Topic] == msg.Topic) Node
27
+	// 1. Find (topicNode[topic] == msg.topic) Node
27
 	topicPtr := sub_mng.list
28
 	topicPtr := sub_mng.list
28
 	pos := topicPtr.getTopicNodePos(topic)
29
 	pos := topicPtr.getTopicNodePos(topic)
29
 
30
 
31
+
30
 	// Don't Exist topicNode
32
 	// Don't Exist topicNode
31
-	if pos == nil {
32
-		return nil, nil, errors.New("Don't Exist topicNode")
33
+	if pos == nil{
34
+		return nil,nil,errors.New("Don't Exist topicNode")
33
 	}
35
 	}
34
 
36
 
35
 	// 2. Traverse all valueNode -> and Match
37
 	// 2. Traverse all valueNode -> and Match
36
 	valPtr := pos.list.head
38
 	valPtr := pos.list.head
37
-	for valPtr != nil {
39
+	for valPtr != nil{
38
 		compare := Compare(valPtr.val, value)
40
 		compare := Compare(valPtr.val, value)
39
 		if compare < 0 { // sub.val > pub.val
41
 		if compare < 0 { // sub.val > pub.val
40
-			// single : { >, >= }
42
+		// single : { >, >= }
41
 
43
 
42
 			// (1) case : >
44
 			// (1) case : >
43
-			for i := 0; i < len(valPtr.single2sub_b); i++ {
45
+			for i := 0; i < len(valPtr.single2sub_b); i++{
44
 				sub := valPtr.single2sub_b[i]
46
 				sub := valPtr.single2sub_b[i]
45
 				ip := sub_mng.sub2ip[sub]
47
 				ip := sub_mng.sub2ip[sub]
46
 				ret = append(ret, ip)
48
 				ret = append(ret, ip)
47
 			}
49
 			}
48
 
50
 
49
 			// (2) case : >=
51
 			// (2) case : >=
50
-			for i := 0; i < len(valPtr.single2sub_eb); i++ {
52
+			for i := 0; i < len(valPtr.single2sub_eb); i++{
51
 				sub := valPtr.single2sub_eb[i]
53
 				sub := valPtr.single2sub_eb[i]
52
 				ip := sub_mng.sub2ip[sub]
54
 				ip := sub_mng.sub2ip[sub]
53
 				ret = append(ret, ip)
55
 				ret = append(ret, ip)
54
 			}
56
 			}
55
-			// range : { >, >= }
57
+		// range : { >, >= }
56
 
58
 
57
 			// (1) case : >
59
 			// (1) case : >
58
-			for i := 0; i < len(valPtr.range2sub_b); i++ {
60
+			for i := 0; i < len(valPtr.range2sub_b); i++{
59
 				sub := valPtr.range2sub_b[i]
61
 				sub := valPtr.range2sub_b[i]
60
 				big = append(big, sub)
62
 				big = append(big, sub)
61
 			}
63
 			}
62
 
64
 
63
 			// (2) case : >=
65
 			// (2) case : >=
64
-			for i := 0; i < len(valPtr.range2sub_eb); i++ {
66
+			for i := 0; i < len(valPtr.range2sub_eb); i++{
65
 				sub := valPtr.range2sub_eb[i]
67
 				sub := valPtr.range2sub_eb[i]
66
 				big = append(big, sub)
68
 				big = append(big, sub)
67
 			}
69
 			}
68
 
70
 
69
 		} else if compare > 0 { // sub.val < pub.val
71
 		} else if compare > 0 { // sub.val < pub.val
70
 
72
 
71
-			// single : { <, <= }
73
+		// single : { <, <= }
72
 
74
 
73
 			// (1) case : <
75
 			// (1) case : <
74
-			for i := 0; i < len(valPtr.single2sub_s); i++ {
76
+			for i := 0; i < len(valPtr.single2sub_s); i++{
75
 				sub := valPtr.single2sub_s[i]
77
 				sub := valPtr.single2sub_s[i]
76
 				ip := sub_mng.sub2ip[sub]
78
 				ip := sub_mng.sub2ip[sub]
77
 				ret = append(ret, ip)
79
 				ret = append(ret, ip)
78
 			}
80
 			}
79
 
81
 
80
 			// (2) case : <=
82
 			// (2) case : <=
81
-			for i := 0; i < len(valPtr.single2sub_es); i++ {
83
+			for i := 0; i < len(valPtr.single2sub_es); i++{
82
 				sub := valPtr.single2sub_es[i]
84
 				sub := valPtr.single2sub_es[i]
83
 				ip := sub_mng.sub2ip[sub]
85
 				ip := sub_mng.sub2ip[sub]
84
 				ret = append(ret, ip)
86
 				ret = append(ret, ip)
85
 			}
87
 			}
86
 
88
 
87
-			// range : { <, <= }
89
+		// range : { <, <= }
88
 
90
 
89
 			// (1) case : <
91
 			// (1) case : <
90
-			for i := 0; i < len(valPtr.range2sub_s); i++ {
92
+			for i := 0; i < len(valPtr.range2sub_s); i++{
91
 				sub := valPtr.range2sub_s[i]
93
 				sub := valPtr.range2sub_s[i]
92
 				small = append(small, sub)
94
 				small = append(small, sub)
93
 			}
95
 			}
94
 			// (2) case : <=
96
 			// (2) case : <=
95
-			for i := 0; i < len(valPtr.range2sub_es); i++ {
97
+			for i := 0; i < len(valPtr.range2sub_es); i++{
96
 				sub := valPtr.range2sub_es[i]
98
 				sub := valPtr.range2sub_es[i]
97
 				small = append(small, sub)
99
 				small = append(small, sub)
98
 			}
100
 			}
99
 
101
 
100
-		} else { // sub.val == pub.val
102
+		} else{ // sub.val == pub.val
101
 
103
 
102
-			// single : { <=, >=, ==}
104
+		// single : { <=, >=, ==}
103
 
105
 
104
 			// (1) case : <=
106
 			// (1) case : <=
105
-			for i := 0; i < len(valPtr.single2sub_es); i++ {
107
+			for i := 0; i < len(valPtr.single2sub_es); i++{
106
 				sub := valPtr.single2sub_es[i]
108
 				sub := valPtr.single2sub_es[i]
107
 				ip := sub_mng.sub2ip[sub]
109
 				ip := sub_mng.sub2ip[sub]
108
 				ret = append(ret, ip)
110
 				ret = append(ret, ip)
109
 			}
111
 			}
110
 
112
 
111
 			// (2) case : >=
113
 			// (2) case : >=
112
-			for i := 0; i < len(valPtr.single2sub_eb); i++ {
114
+			for i := 0; i < len(valPtr.single2sub_eb); i++{
113
 				sub := valPtr.single2sub_eb[i]
115
 				sub := valPtr.single2sub_eb[i]
114
 				ip := sub_mng.sub2ip[sub]
116
 				ip := sub_mng.sub2ip[sub]
115
 				ret = append(ret, ip)
117
 				ret = append(ret, ip)
116
 			}
118
 			}
117
 
119
 
118
 			// (3) case : ==
120
 			// (3) case : ==
119
-			for i := 0; i < len(valPtr.single2sub_e); i++ {
121
+			for i := 0; i < len(valPtr.single2sub_e); i++{
120
 				sub := valPtr.single2sub_e[i]
122
 				sub := valPtr.single2sub_e[i]
121
 				ip := sub_mng.sub2ip[sub]
123
 				ip := sub_mng.sub2ip[sub]
122
 				ret = append(ret, ip)
124
 				ret = append(ret, ip)
123
 			}
125
 			}
124
 
126
 
125
-			// range : { <=, >= }
127
+		// range : { <=, >= }
126
 
128
 
127
 			// (1) case : <=
129
 			// (1) case : <=
128
-			for i := 0; i < len(valPtr.range2sub_es); i++ {
130
+			for i := 0; i < len(valPtr.range2sub_es); i++{
129
 				sub := valPtr.range2sub_es[i]
131
 				sub := valPtr.range2sub_es[i]
130
 				small = append(small, sub)
132
 				small = append(small, sub)
131
 			}
133
 			}
132
 
134
 
133
 			// (2) case : >=
135
 			// (2) case : >=
134
-			for i := 0; i < len(valPtr.range2sub_eb); i++ {
136
+			for i := 0; i < len(valPtr.range2sub_eb); i++{
135
 				sub := valPtr.range2sub_eb[i]
137
 				sub := valPtr.range2sub_eb[i]
136
 				big = append(big, sub)
138
 				big = append(big, sub)
137
 			}
139
 			}
138
 
140
 
139
 		}
141
 		}
142
+		valPtr = valPtr.next
140
 	}
143
 	}
141
 
144
 
142
 	// Add the intersection IP address of two sets (large and small) to the return list
145
 	// Add the intersection IP address of two sets (large and small) to the return list
143
 	hash := intersect.Hash(small, big)
146
 	hash := intersect.Hash(small, big)
144
-	for i := 0; i < len(hash); i++ {
145
-		sub := hash[i].(int)
147
+	list := reflect.ValueOf(hash)
148
+	for i := 0;  i < list.Len(); i++{
149
+		sub := list.Index(i).Interface().(int)
146
 		ip := sub_mng.sub2ip[sub]
150
 		ip := sub_mng.sub2ip[sub]
147
 		ret = append(ret, ip)
151
 		ret = append(ret, ip)
148
 	}
152
 	}
150
 	match_mng.match_count++
154
 	match_mng.match_count++
151
 
155
 
152
 	return ret, msg, nil
156
 	return ret, msg, nil
153
-}
157
+}

Načítá se…
Zrušit
Uložit