File tree 1 file changed +24
-6
lines changed
Sources/Telegrammer/Dispatcher
1 file changed +24
-6
lines changed Original file line number Diff line number Diff line change @@ -28,6 +28,8 @@ public class Dispatcher {
28
28
29
29
/// Queue which keep all added handlers and gives appropriates
30
30
public var handlersQueue : HandlersQueue
31
+
32
+ private var prevData : Data ?
31
33
32
34
public init ( bot: Bot , worker: Worker = MultiThreadedEventLoopGroup ( numberOfThreads: System . coreCount) ) {
33
35
self . bot = bot
@@ -63,15 +65,31 @@ public class Dispatcher {
63
65
- bytebuffer: Array of Telegram updates
64
66
*/
65
67
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 {
67
69
return
68
70
}
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
74
91
}
92
+ return false
75
93
}
76
94
}
77
95
You can’t perform that action at this time.
0 commit comments