5 #ifndef CORELINKSTREAMDATA_H 6 #define CORELINKSTREAMDATA_H 13 const std::string& user,
const std::string& workspace,
const std::string& meta,
14 int streamRef,
const std::vector<std::string>& type) :
15 streamID(streamID), state(state), mtu(mtu), user(user), workspace(workspace), meta(meta), streamRef(streamRef), type(type)
19 streamID(STREAM_DEF), state(Const::STREAM_STATE_NONE), mtu(-1), user(), workspace(), meta(), streamRef(-1), type()
25 state(rhs.state), mtu(rhs.mtu), streamRef(rhs.streamRef), streamID(rhs.streamID), user(rhs.user), workspace(rhs.workspace), meta(rhs.meta), type(rhs.type)
35 streamRef = rhs.streamRef;
42 <<
"\nProtocol:" << streamStateName(rhs.
state)
43 <<
" State: " << ((rhs.
state & Const::STREAM_STATE_SEND) > 0 ?
"sender" :
"") << ((rhs.
state & Const::STREAM_STATE_RECV) > 0 ?
"receiver" :
"")
45 if (rhs.
type.size() > 0) {
47 for (
size_t i = 1; i < rhs.
type.size(); ++i) { os <<
", " << rhs.
type[i]; }
50 if (rhs.streamRef > -1) { os <<
"Internal identifier: " << rhs.streamRef <<
"\n"; }
58 std::vector<std::string> types;
59 dataCasted = (
int*)data;
62 streamID = dataCasted[len + 1];
63 state = dataCasted[len + 2];
64 mtu = dataCasted[len + 3];
66 types.resize(len - 6);
67 tmp = (len + 4) *
sizeof(
int);
68 user = std::string(data + tmp, dataCasted[4]);
70 workspace = std::string(data + tmp, dataCasted[5]);
72 meta = std::string(data + tmp, dataCasted[6]);
74 for (std::size_t i = 0; i < types.size(); ++i) {
75 types[i] = std::string(data + tmp, dataCasted[7 + i]);
76 tmp += dataCasted[7 + i];
79 return StreamData(streamID, state, mtu, user, workspace, meta, CorelinkDLL::getStreamRef(streamID), types);
84 return (
streamID & Const::STREAM_STATE_SEND) > 0;
88 return CorelinkDLL::isSendStream(streamID);
93 return (
streamID & Const::STREAM_STATE_RECV) > 0;
97 return CorelinkDLL::isRecvStream(streamID);
105 len = CorelinkDLL::getStreamDataLen(streamID);
107 data =
new char[len];
108 CorelinkDLL::getStreamDataStr(streamID, data);
109 stream =
parse(data);
113 data = (
char*)CorelinkDLL::getStreamData(streamID, len);
115 stream =
parse(data);
122 state = CorelinkDLL::getStreamState(streamID);
123 ref = CorelinkDLL::getStreamRef(streamID);
124 if (ref < 0 || (state & Corelink::Const::STREAM_STATE_SEND) == 0) {
return SendStream(); }
130 state = CorelinkDLL::getStreamState(streamID);
131 ref = CorelinkDLL::getStreamRef(streamID);
132 if (ref < 0 || (state & Corelink::Const::STREAM_STATE_RECV) == 0) {
return RecvStream(); }
140 std::vector<STREAM_ID> streamIDs;
141 streamIDs = std::vector<STREAM_ID>();
144 CorelinkDLL::getClientStreamsPushed(commID);
145 streamIDs.resize(CorelinkDLL::getCommDataLen(commID) /
sizeof(
int));
146 data =
new char[streamIDs.size() *
sizeof(int)];
147 dataCasted = (
int*)data;
148 CorelinkDLL::getCommDataStr(commID, data);
149 for (std::size_t i = 0; i < streamIDs.size(); ++i) {
150 streamIDs[i] = dataCasted[i];
153 dataCasted =
nullptr;
156 data = CorelinkDLL::getClientStreams();
157 dataCasted = (
int*)data;
158 streamIDs.resize(dataCasted[0]);
159 for (std::size_t i = 0; i < streamIDs.size(); ++i) {
160 streamIDs[i] = dataCasted[i + 1];
162 CorelinkDLL::freeData(data);
163 dataCasted =
nullptr;
171 std::vector<STREAM_ID> streamIDs;
172 streamIDs = std::vector<STREAM_ID>();
175 CorelinkDLL::getClientStreamSourcesPushed(streamID, commID);
176 streamIDs.resize(CorelinkDLL::getCommDataLen(commID) /
sizeof(
int));
177 data =
new char[streamIDs.size() *
sizeof(int)];
178 dataCasted = (
int*)data;
179 CorelinkDLL::getCommDataStr(commID, data);
180 for (std::size_t i = 0; i < streamIDs.size(); ++i) {
181 streamIDs[i] = dataCasted[i];
184 dataCasted =
nullptr;
187 data = CorelinkDLL::getClientStreamSources(streamID);
188 dataCasted = (
int*)data;
189 streamIDs.resize(dataCasted[0]);
190 for (std::size_t i = 0; i < streamIDs.size(); ++i) {
191 streamIDs[i] = dataCasted[i + 1];
193 CorelinkDLL::freeData(data);
194 dataCasted =
nullptr;
std::vector< std::string > type
Type of the stream. Sender may only have a single type while Receiver has arbritary amount...
static RecvStream getReceiverHandler(const STREAM_ID &streamID)
Defines the classes in the wrapper and their relations.
int state
Stores the type of the stream (UDP, TCP, WS & SEND, RECV).
std::string user
Username of the creator of the stream.
std::string workspace
Workspace stream belongs to in the server.
friend std::ostream & operator<<(std::ostream &os, const StreamData &rhs)
int streamID
ID of the stream seen by the server.
static StreamData parse(const char *data)
int mtu
Maximum transmission unit. Max size of packets transferable at a time. Not actually used as of now...
std::string meta
Additional data attached to the stream.
static SendStream getSenderHandler(const STREAM_ID &streamID)
static std::vector< STREAM_ID > listStreamSources(const STREAM_ID &streamID)
static std::vector< STREAM_ID > listClientStreams()
StreamData & operator=(const StreamData &rhs)
static StreamData getStreamData(const STREAM_ID &streamID)