Skip to content

Commit 4591768

Browse files
authoredSep 6, 2021
Merge pull request #47 from CoolONEOfficial/patch-2
Fix multipart Updates parsing
2 parents 1e793f0 + 4bff4ef commit 4591768

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed
 

‎Sources/Telegrammer/Dispatcher/Dispatcher.swift

+24-6
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public class Dispatcher {
2828

2929
/// Queue which keep all added handlers and gives appropriates
3030
public var handlersQueue: HandlersQueue
31+
32+
private var prevData: Data?
3133

3234
public init(bot: Bot, worker: Worker = MultiThreadedEventLoopGroup(numberOfThreads: System.coreCount)) {
3335
self.bot = bot
@@ -63,15 +65,31 @@ public class Dispatcher {
6365
- bytebuffer: Array of Telegram updates
6466
*/
6567
public func enqueue(bytebuffer: ByteBuffer) {
66-
guard let data = bytebuffer.getBytes(at: 0, length: bytebuffer.writerIndex) else {
68+
guard let dataArr = bytebuffer.getBytes(at: 0, length: bytebuffer.writerIndex) else {
6769
return
6870
}
69-
do {
70-
let update = try JSONDecoder().decode(Update.self, from: Data(data))
71-
enqueue(updates: [update])
72-
} catch {
73-
log.error(error.logMessage)
71+
let data = Data(dataArr)
72+
73+
if enqueue(from: data) {
74+
return
75+
} else if let prevData = prevData, enqueue(from: prevData + data) {
76+
return
77+
} else {
78+
if prevData != nil {
79+
prevData?.append(data)
80+
} else {
81+
prevData = Data(data)
82+
}
83+
}
84+
}
85+
86+
private func enqueue(from data: Data) -> Bool {
87+
if let update = try? JSONDecoder().decode(Update.self, from: data) {
88+
enqueue(updates: [ update ])
89+
prevData = nil
90+
return true
7491
}
92+
return false
7593
}
7694
}
7795

0 commit comments

Comments
 (0)
Please sign in to comment.