ls
This commit is contained in:
1 parent
7073e9b4ba
commit
7f45bd6bc9
1 file changed
+22
-36
+22
-36
@@ -2,6 +2,7 @@ package broker
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"hmq/packets"
|
"hmq/packets"
|
||||||
|
"math/rand"
|
||||||
"net"
|
"net"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
@@ -221,40 +222,32 @@ func (c *client) ProcessPublishMessage(packet *packets.PublishPacket) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
subinfo, exist := b.queues[topic]
|
idx := GenerateRangeNum(0, len(r.qsubs))
|
||||||
qnum := 0
|
for {
|
||||||
var qsub *subscription
|
sub := r.qsubs[idx]
|
||||||
if exist {
|
if sub.client.typ == ROUTER {
|
||||||
idx := subinfo.index
|
if typ == ROUTER {
|
||||||
for _, sub := range r.qsubs {
|
idx = GenerateRangeNum(0, len(r.qsubs))
|
||||||
if sub.client.typ == ROUTER {
|
continue
|
||||||
if typ == ROUTER {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if idx <= qnum {
|
|
||||||
qsub = sub
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if sub.client.typ == CLIENT {
|
|
||||||
qnum = qnum + 1
|
|
||||||
} else {
|
|
||||||
qnum = qnum + sub.client.rsubs[topic].num
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
subinfo.index = (idx + 1) % subinfo.count
|
if sub != nil {
|
||||||
}
|
err := sub.client.WriterPacket(packet)
|
||||||
|
if err != nil {
|
||||||
if qsub != nil {
|
log.Error("process will message for qsub error, ", err)
|
||||||
err := qsub.client.WriterPacket(packet)
|
}
|
||||||
if err != nil {
|
break
|
||||||
log.Error("process will message for qsub error, ", err)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GenerateRangeNum(min, max int) int {
|
||||||
|
// rand.Seed(time.Now().Unix())
|
||||||
|
randNum := rand.Intn(max-min) + min
|
||||||
|
return randNum
|
||||||
|
}
|
||||||
|
|
||||||
func (c *client) ProcessSubscribe(packet *packets.SubscribePacket) {
|
func (c *client) ProcessSubscribe(packet *packets.SubscribePacket) {
|
||||||
b := c.broker
|
b := c.broker
|
||||||
if b == nil {
|
if b == nil {
|
||||||
@@ -280,12 +273,6 @@ func (c *client) ProcessSubscribe(packet *packets.SubscribePacket) {
|
|||||||
if queue {
|
if queue {
|
||||||
if len(t) > 7 {
|
if len(t) > 7 {
|
||||||
t = t[7:]
|
t = t[7:]
|
||||||
if _, exists := b.queues[topic]; !exists {
|
|
||||||
b.queues[topic] = &Queue{
|
|
||||||
count: 0,
|
|
||||||
index: 0,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
retcodes = append(retcodes, QosFailure)
|
retcodes = append(retcodes, QosFailure)
|
||||||
continue
|
continue
|
||||||
@@ -301,7 +288,7 @@ func (c *client) ProcessSubscribe(packet *packets.SubscribePacket) {
|
|||||||
case CLIENT:
|
case CLIENT:
|
||||||
if _, exist := c.subs[topic]; !exist {
|
if _, exist := c.subs[topic]; !exist {
|
||||||
c.subs[topic] = sub
|
c.subs[topic] = sub
|
||||||
b.queues[topic].count++
|
|
||||||
} else {
|
} else {
|
||||||
//if exist ,check whether qos change
|
//if exist ,check whether qos change
|
||||||
c.subs[topic].qos = qoss[i]
|
c.subs[topic].qos = qoss[i]
|
||||||
@@ -312,11 +299,10 @@ func (c *client) ProcessSubscribe(packet *packets.SubscribePacket) {
|
|||||||
if subinfo, exist := c.rsubs[topic]; !exist {
|
if subinfo, exist := c.rsubs[topic]; !exist {
|
||||||
sinfo := &subInfo{sub: sub, num: 1}
|
sinfo := &subInfo{sub: sub, num: 1}
|
||||||
c.rsubs[topic] = sinfo
|
c.rsubs[topic] = sinfo
|
||||||
b.queues[topic].count++
|
|
||||||
} else {
|
} else {
|
||||||
subinfo.num = subinfo.num + 1
|
subinfo.num = subinfo.num + 1
|
||||||
retcodes = append(retcodes, qoss[i])
|
retcodes = append(retcodes, qoss[i])
|
||||||
b.queues[topic].count++
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user