Bläddra i källkod

[fix] valptr, intersect issue

master
extra1563 4 år sedan
förälder
incheckning
0c2b9e9d06
1 ändrade filer med 35 tillägg och 31 borttagningar
  1. 35
    31
      src/broker/modules/matching.go

+ 35
- 31
src/broker/modules/matching.go Visa fil

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

Laddar…
Avbryt
Spara