15#include "igtlMessageBase.h"
31 m_CommandQueue.clear();
33 m_CommandQueue.push_back(message);
34 this->m_Mutex.unlock();
41 std::stringstream infolog;
43 infolog <<
"Received message of type ";
45 if (
dynamic_cast<igtl::TrackingDataMessage*
>(msg.GetPointer()) !=
nullptr)
48 m_TrackingDataQueue.clear();
50 this->m_TrackingDataQueue.push_back(
dynamic_cast<igtl::TrackingDataMessage*
>(msg.GetPointer()));
54 else if (
dynamic_cast<igtl::TransformMessage*
>(msg.GetPointer()) !=
nullptr)
57 m_TransformQueue.clear();
59 this->m_TransformQueue.push_back(
dynamic_cast<igtl::TransformMessage*
>(msg.GetPointer()));
61 infolog <<
"TRANSFORM";
63 else if (
dynamic_cast<igtl::StringMessage*
>(msg.GetPointer()) !=
nullptr)
66 m_StringQueue.clear();
68 this->m_StringQueue.push_back(
dynamic_cast<igtl::StringMessage*
>(msg.GetPointer()));
72 else if (
dynamic_cast<igtl::ImageMessage*
>(msg.GetPointer()) !=
nullptr)
74 igtl::ImageMessage::Pointer imageMsg =
dynamic_cast<igtl::ImageMessage*
>(msg.GetPointer());
75 int* dim =
new int[3];
76 imageMsg->GetDimensions(dim);
80 m_Image3dQueue.clear();
82 this->m_Image3dQueue.push_back(
dynamic_cast<igtl::ImageMessage*
>(msg.GetPointer()));
89 m_Image2dQueue.clear();
91 this->m_Image2dQueue.push_back(
dynamic_cast<igtl::ImageMessage*
>(msg.GetPointer()));
101 this->m_MiscQueue.push_back(msg);
106 m_Latest_Message = msg;
110 this->m_Mutex.unlock();
115 mitk::IGTLMessage::Pointer ret =
nullptr;
116 this->m_Mutex.lock();
117 if (this->m_SendQueue.size() > 0)
119 ret = this->m_SendQueue.front();
120 this->m_SendQueue.pop_front();
122 this->m_Mutex.unlock();
128 igtl::MessageBase::Pointer ret =
nullptr;
129 this->m_Mutex.lock();
130 if (this->m_MiscQueue.size() > 0)
132 ret = this->m_MiscQueue.front();
133 this->m_MiscQueue.pop_front();
135 this->m_Mutex.unlock();
141 igtl::ImageMessage::Pointer ret =
nullptr;
142 this->m_Mutex.lock();
143 if (this->m_Image2dQueue.size() > 0)
145 ret = this->m_Image2dQueue.front();
146 this->m_Image2dQueue.pop_front();
148 this->m_Mutex.unlock();
154 igtl::ImageMessage::Pointer ret =
nullptr;
155 this->m_Mutex.lock();
156 if (this->m_Image3dQueue.size() > 0)
158 ret = this->m_Image3dQueue.front();
159 this->m_Image3dQueue.pop_front();
161 this->m_Mutex.unlock();
167 igtl::TrackingDataMessage::Pointer ret =
nullptr;
168 this->m_Mutex.lock();
169 if (this->m_TrackingDataQueue.size() > 0)
171 ret = this->m_TrackingDataQueue.front();
172 this->m_TrackingDataQueue.pop_front();
174 this->m_Mutex.unlock();
180 igtl::MessageBase::Pointer ret =
nullptr;
181 this->m_Mutex.lock();
182 if (this->m_CommandQueue.size() > 0)
184 ret = this->m_CommandQueue.front();
185 this->m_CommandQueue.pop_front();
187 this->m_Mutex.unlock();
193 igtl::StringMessage::Pointer ret =
nullptr;
194 this->m_Mutex.lock();
195 if (this->m_StringQueue.size() > 0)
197 ret = this->m_StringQueue.front();
198 this->m_StringQueue.pop_front();
200 this->m_Mutex.unlock();
206 igtl::TransformMessage::Pointer ret =
nullptr;
207 this->m_Mutex.lock();
208 if (this->m_TransformQueue.size() > 0)
210 ret = this->m_TransformQueue.front();
211 this->m_TransformQueue.pop_front();
213 this->m_Mutex.unlock();
219 this->m_Mutex.lock();
221 if (this->m_Latest_Message !=
nullptr)
223 s <<
"Device Type: " << this->m_Latest_Message->GetDeviceType() << std::endl;
224 s <<
"Device Name: " << this->m_Latest_Message->GetDeviceName() << std::endl;
230 this->m_Mutex.unlock();
236 this->m_Mutex.lock();
238 if (m_Latest_Message !=
nullptr)
240 s << this->m_Latest_Message->GetDeviceType();
246 this->m_Mutex.unlock();
252 this->m_Mutex.lock();
254 if (m_Latest_Message !=
nullptr)
256 s <<
"Device Type: " << this->m_Latest_Message->GetDeviceType() << std::endl;
257 s <<
"Device Name: " << this->m_Latest_Message->GetDeviceName() << std::endl;
263 this->m_Mutex.unlock();
269 this->m_Mutex.lock();
271 if (m_Latest_Message !=
nullptr)
273 s << this->m_Latest_Message->GetDeviceType();
279 this->m_Mutex.unlock();
285 return (this->m_CommandQueue.size() + this->m_Image2dQueue.size() + this->m_Image3dQueue.size() + this->m_MiscQueue.size()
286 + this->m_StringQueue.size() + this->m_TrackingDataQueue.size() + this->m_TransformQueue.size());
291 this->m_Mutex.lock();
296 this->m_Mutex.unlock();
306 this->m_Mutex.unlock();
igtl::ImageMessage::Pointer PullImage3dMessage()
std::deque< mitk::IGTLMessage::Pointer > m_SendQueue
std::string GetNextMsgInformationString()
Returns a string with information about the oldest message in the queue.
std::string GetLatestMsgInformationString()
Returns a string with information about the oldest message in the queue.
igtl::StringMessage::Pointer PullStringMessage()
void PushCommandMessage(igtl::MessageBase::Pointer message)
Adds the message to the queue.
void EnableNoBufferingMode(bool enable)
~IGTLMessageQueue() override
BufferingType m_BufferingType
defines the kind of buffering
std::mutex m_Mutex
Mutex to take car of the queue.
igtl::TransformMessage::Pointer PullTransformMessage()
std::string GetLatestMsgDeviceType()
Returns the device type of the oldest message in the queue.
void PushSendMessage(mitk::IGTLMessage::Pointer message)
void PushMessage(igtl::MessageBase::Pointer message)
Adds the message to the queue.
mitk::IGTLMessage::Pointer PullSendMessage()
igtl::ImageMessage::Pointer PullImage2dMessage()
igtl::MessageBase::Pointer PullMiscMessage()
Returns and removes the oldest message from the queue.
int GetSize()
Get the number of messages in the queue.
std::string GetNextMsgDeviceType()
Returns the device type of the oldest message in the queue.
igtl::TrackingDataMessage::Pointer PullTrackingMessage()
igtl::MessageBase::Pointer PullCommandMessage()