summaryrefslogtreecommitdiff
path: root/p2pvr/p2comp/streamSinkWrapper.cpp
blob: 3dd3d2b860143148214fe965d05c255f6748e6c2 (plain)
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
#include "streamSinkWrapper.h"

#define LOCK(lock) std::lock_guard<std::mutex> _lock##__LINE_NO__##lock(lock);

StreamSinkWrapper::StreamSinkWrapper(const Stream::Sink & s, std::promise<int> & p) :
	sink(s),
	promise(p),
	completed(false)
{
}

bool
StreamSinkWrapper::NewData(const P2PVR::Data & data, const Ice::Current &)
{
	try {
		sink(reinterpret_cast<const char *>(&data.front()), data.size());
		return false;
	}
	catch (const std::ios_base::failure &) {
		LOCK(lock) {
			if (completed) return true;
			completed = true;
			promise.set_value(0);
			return true;
		}
	}
}