forked from rsocket/rsocket-cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStreamState.cpp
More file actions
37 lines (29 loc) · 933 Bytes
/
StreamState.cpp
File metadata and controls
37 lines (29 loc) · 933 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Copyright 2004-present Facebook. All Rights Reserved.
#include "rsocket/statemachine/StreamState.h"
#include "rsocket/RSocketStats.h"
namespace rsocket {
StreamState::StreamState(RSocketStats& stats) : stats_(stats) {}
StreamState::~StreamState() {
onClearFrames();
}
void StreamState::enqueueOutputPendingFrame(
std::unique_ptr<folly::IOBuf> frame) {
auto length = frame->computeChainDataLength();
stats_.streamBufferChanged(1, static_cast<int64_t>(length));
dataLength_ += length;
outputFrames_.push_back(std::move(frame));
}
std::deque<std::unique_ptr<folly::IOBuf>>
StreamState::moveOutputPendingFrames() {
onClearFrames();
return std::move(outputFrames_);
}
void StreamState::onClearFrames() {
auto numFrames = outputFrames_.size();
if (numFrames != 0) {
stats_.streamBufferChanged(
-static_cast<int64_t>(numFrames), -static_cast<int64_t>(dataLength_));
dataLength_ = 0;
}
}
}