Skip to content

Commit 107492b

Browse files
authored
Merge pull request #51 from cloudstruct/feature/send-message-split-segments
Split large messages across multiple segments when sending
2 parents b4c6d90 + e74f9fc commit 107492b

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

muxer/segment.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
const (
88
SEGMENT_PROTOCOL_ID_RESPONSE_FLAG = 0x8000
9+
SEGMENT_MAX_PAYLOAD_LENGTH = 65535
910
)
1011

1112
type SegmentHeader struct {

protocol/protocol.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,24 @@ func (p *Protocol) SendMessage(msg Message, isResponse bool) error {
106106
return err
107107
}
108108
}
109-
segment := muxer.NewSegment(p.config.ProtocolId, data, isResponse)
110-
p.sendChan <- segment
109+
// Send message in multiple segments (if needed)
110+
for {
111+
// Determine segment payload length
112+
segmentPayloadLength := len(data)
113+
if segmentPayloadLength > muxer.SEGMENT_MAX_PAYLOAD_LENGTH {
114+
segmentPayloadLength = muxer.SEGMENT_MAX_PAYLOAD_LENGTH
115+
}
116+
// Send current segment
117+
segmentPayload := data[:segmentPayloadLength]
118+
segment := muxer.NewSegment(p.config.ProtocolId, segmentPayload, isResponse)
119+
p.sendChan <- segment
120+
// Remove current segment's data from buffer
121+
if len(data) > segmentPayloadLength {
122+
data = data[segmentPayloadLength:]
123+
} else {
124+
break
125+
}
126+
}
111127
// Set new state and unlock
112128
p.setState(newState)
113129
p.stateMutex.Unlock()

0 commit comments

Comments
 (0)