1 /***************************************************************************
2 * Copyright 2012 BMW Car IT GmbH
3 * Copyright (C) 2012 DENSO CORPORATION and Robert Bosch Car Multimedia Gmbh
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 ****************************************************************************/
20 #include "GenericCommunicator.h"
21 #include "ilm_types.h"
24 #include "Configuration.h"
26 #include "ICommandExecutor.h"
27 #include "CommitCommand.h"
28 #include "LayerCreateCommand.h"
29 #include "SurfaceCreateCommand.h"
30 #include "SurfaceGetDimensionCommand.h"
31 #include "LayerGetDimensionCommand.h"
32 #include "SurfaceGetOpacityCommand.h"
33 #include "LayerGetOpacityCommand.h"
34 #include "SurfaceGetPixelformatCommand.h"
35 #include "LayerGetVisibilityCommand.h"
36 #include "SurfaceGetVisibilityCommand.h"
37 #include "LayerAddSurfaceCommand.h"
38 #include "LayerRemoveSurfaceCommand.h"
39 #include "LayerRemoveCommand.h"
40 #include "SurfaceRemoveCommand.h"
41 #include "SurfaceGetOrientationCommand.h"
42 #include "LayerGetOrientationCommand.h"
43 #include "LayerSetDestinationRectangleCommand.h"
44 #include "SurfaceSetDestinationRectangleCommand.h"
45 #include "LayerSetOpacityCommand.h"
46 #include "SurfaceSetOpacityCommand.h"
47 #include "LayerSetSourceRectangleCommand.h"
48 #include "SurfaceSetSourceRectangleCommand.h"
49 #include "LayerSetOrientationCommand.h"
50 #include "SurfaceSetOrientationCommand.h"
51 #include "LayerSetVisibilityCommand.h"
52 #include "SurfaceSetVisibilityCommand.h"
53 #include "DebugCommand.h"
54 #include "ExitCommand.h"
55 #include "ScreenSetRenderOrderCommand.h"
56 #include "LayerSetRenderOrderCommand.h"
57 #include "LayerSetDimensionCommand.h"
58 #include "SurfaceSetDimensionCommand.h"
59 #include "LayerSetPositionCommand.h"
60 #include "SurfaceSetPositionCommand.h"
61 #include "LayerGetPositionCommand.h"
62 #include "SurfaceGetPositionCommand.h"
63 #include "ShaderCreateCommand.h"
64 #include "ShaderDestroyCommand.h"
65 #include "SurfaceSetShaderCommand.h"
66 #include "ShaderSetUniformsCommand.h"
67 #include "ScreenDumpCommand.h"
68 #include "LayerDumpCommand.h"
69 #include "SurfaceDumpCommand.h"
70 #include "SurfaceSetNativeContentCommand.h"
71 #include "SurfaceRemoveNativeContentCommand.h"
72 #include "SurfaceSetKeyboardFocusCommand.h"
73 #include "SurfaceGetKeyboardFocusCommand.h"
74 #include "SurfaceUpdateInputEventAcceptance.h"
75 #include "SurfaceSetChromaKeyCommand.h"
76 #include "LayerSetChromaKeyCommand.h"
77 #include "SetOptimizationModeCommand.h"
78 #include "GetOptimizationModeCommand.h"
89 #define DEFAULT_SCREEN 0
91 GenericCommunicator::GenericCommunicator(ICommandExecutor& executor, Configuration& config)
92 : ICommunicator(&executor)
93 , PluginBase(executor, config, Communicator_Api_v1)
94 , m_running(ILM_FALSE)
96 MethodTable manager_methods[] =
98 { "ServiceConnect", &GenericCommunicator::ServiceConnect },
99 { "ServiceDisconnect", &GenericCommunicator::ServiceDisconnect },
100 { "Debug", &GenericCommunicator::Debug },
101 { "ScreenShot", &GenericCommunicator::ScreenShot },
102 { "ScreenShotOfLayer", &GenericCommunicator::ScreenShotOfLayer },
103 { "ScreenShotOfSurface", &GenericCommunicator::ScreenShotOfSurface },
104 { "GetScreenResolution", &GenericCommunicator::GetScreenResolution },
105 { "GetNumberOfHardwareLayers", &GenericCommunicator::GetNumberOfHardwareLayers },
106 { "GetScreenIDs", &GenericCommunicator::GetScreenIDs },
107 { "ListAllLayerIDS", &GenericCommunicator::ListAllLayerIDS },
108 { "ListAllLayerIDsOnScreen", &GenericCommunicator::ListAllLayerIDsOnScreen },
109 { "ListAllSurfaceIDS", &GenericCommunicator::ListAllSurfaceIDS },
110 { "ListSurfaceofLayer", &GenericCommunicator::ListSurfaceofLayer },
111 { "GetPropertiesOfSurface", &GenericCommunicator::GetPropertiesOfSurface },
112 { "GetPropertiesOfLayer", &GenericCommunicator::GetPropertiesOfLayer },
113 { "CreateSurface", &GenericCommunicator::CreateSurface },
114 { "CreateSurfaceFromId", &GenericCommunicator::CreateSurfaceFromId },
115 { "InitializeSurface", &GenericCommunicator::InitializeSurface },
116 { "InitializeSurfaceFromId", &GenericCommunicator::InitializeSurfaceFromId },
117 { "SetSurfaceNativeContent", &GenericCommunicator::SetSurfaceNativeContent },
118 { "RemoveSurfaceNativeContent", &GenericCommunicator::RemoveSurfaceNativeContent },
119 { "RemoveSurface", &GenericCommunicator::RemoveSurface },
120 { "CreateLayer", &GenericCommunicator::CreateLayer },
121 { "CreateLayerFromId", &GenericCommunicator::CreateLayerFromId },
122 { "CreateLayerWithDimension", &GenericCommunicator::CreateLayerWithDimension },
123 { "CreateLayerFromIdWithDimension", &GenericCommunicator::CreateLayerFromIdWithDimension },
124 { "RemoveLayer", &GenericCommunicator::RemoveLayer },
125 { "AddSurfaceToLayer", &GenericCommunicator::AddSurfaceToLayer },
126 { "RemoveSurfaceFromLayer", &GenericCommunicator::RemoveSurfaceFromLayer },
127 { "SetSurfaceSourceRegion", &GenericCommunicator::SetSurfaceSourceRegion },
128 { "SetLayerSourceRegion", &GenericCommunicator::SetLayerSourceRegion },
129 { "SetSurfaceDestinationRegion", &GenericCommunicator::SetSurfaceDestinationRegion },
130 { "SetSurfacePosition", &GenericCommunicator::SetSurfacePosition },
131 { "GetSurfacePosition", &GenericCommunicator::GetSurfacePosition },
132 { "SetSurfaceDimension", &GenericCommunicator::SetSurfaceDimension },
133 { "SetLayerDestinationRegion", &GenericCommunicator::SetLayerDestinationRegion },
134 { "SetLayerPosition", &GenericCommunicator::SetLayerPosition },
135 { "GetLayerPosition", &GenericCommunicator::GetLayerPosition },
136 { "SetLayerDimension", &GenericCommunicator::SetLayerDimension },
137 { "GetLayerDimension", &GenericCommunicator::GetLayerDimension },
138 { "GetSurfaceDimension", &GenericCommunicator::GetSurfaceDimension },
139 { "SetSurfaceOpacity", &GenericCommunicator::SetSurfaceOpacity },
140 { "SetLayerOpacity", &GenericCommunicator::SetLayerOpacity },
141 { "GetSurfaceOpacity", &GenericCommunicator::GetSurfaceOpacity },
142 { "GetLayerOpacity", &GenericCommunicator::GetLayerOpacity },
143 { "SetSurfaceOrientation", &GenericCommunicator::SetSurfaceOrientation },
144 { "GetSurfaceOrientation", &GenericCommunicator::GetSurfaceOrientation },
145 { "SetLayerOrientation", &GenericCommunicator::SetLayerOrientation },
146 { "GetLayerOrientation", &GenericCommunicator::GetLayerOrientation },
147 { "GetSurfacePixelformat", &GenericCommunicator::GetSurfacePixelformat },
148 { "SetSurfaceVisibility", &GenericCommunicator::SetSurfaceVisibility },
149 { "SetLayerVisibility", &GenericCommunicator::SetLayerVisibility },
150 { "GetSurfaceVisibility", &GenericCommunicator::GetSurfaceVisibility },
151 { "GetLayerVisibility", &GenericCommunicator::GetLayerVisibility },
152 { "SetRenderOrderOfLayers", &GenericCommunicator::SetRenderOrderOfLayers },
153 { "SetSurfaceRenderOrderWithinLayer", &GenericCommunicator::SetSurfaceRenderOrderWithinLayer },
154 { "GetLayerType", &GenericCommunicator::GetLayerType },
155 { "GetLayertypeCapabilities", &GenericCommunicator::GetLayertypeCapabilities },
156 { "GetLayerCapabilities", &GenericCommunicator::GetLayerCapabilities },
157 { "Exit", &GenericCommunicator::Exit },
158 { "CommitChanges", &GenericCommunicator::CommitChanges },
159 { "CreateShader", &GenericCommunicator::CreateShader },
160 { "DestroyShader", &GenericCommunicator::DestroyShader },
161 { "SetShader", &GenericCommunicator::SetShader },
162 { "SetUniforms", &GenericCommunicator::SetUniforms },
163 { "SetKeyboardFocusOn", &GenericCommunicator::SetKeyboardFocusOn },
164 { "GetKeyboardFocusSurfaceId", &GenericCommunicator::GetKeyboardFocusSurfaceId },
165 { "UpdateInputEventAcceptanceOn", &GenericCommunicator::UpdateInputEventAcceptanceOn },
166 { "SetSurfaceChromaKey", &GenericCommunicator::SetSurfaceChromaKey },
167 { "SetLayerChromaKey", &GenericCommunicator::SetLayerChromaKey },
168 { "LayerAddNotification", &GenericCommunicator::LayerAddNotification },
169 { "SurfaceAddNotification", &GenericCommunicator::SurfaceAddNotification },
170 { "LayerRemoveNotification", &GenericCommunicator::LayerRemoveNotification },
171 { "SurfaceRemoveNotification", &GenericCommunicator::SurfaceRemoveNotification },
172 { "SetOptimizationMode", &GenericCommunicator::SetOptimizationMode },
173 { "GetOptimizationMode", &GenericCommunicator::GetOptimizationMode },
174 { "GetPropertiesOfScreen", &GenericCommunicator::GetPropertiesOfScreen }
177 int entryCount = sizeof(manager_methods) / sizeof(MethodTable);
179 for (int index = 0; index < entryCount; ++index)
181 MethodTable* method = &manager_methods[index];
182 if (method->function)
184 m_callBackTable[method->name] = *method;
185 LOG_DEBUG("GenericCommunicator", "registered callback for " << method->name);
189 memset(&m_ipcModule, 0, sizeof(m_ipcModule));
191 mThreadId = pthread_self();
194 bool GenericCommunicator::start()
196 LOG_DEBUG("GenericCommunicator", "Starting up IpcModules.");
198 if (!loadIpcModule(&m_ipcModule))
200 LOG_ERROR("GenericCommunicator", "Loading IpcModule failed.");
203 LOG_DEBUG("GenericCommunicator", "Loading IpcModule success.");
205 if (!m_ipcModule.initServiceMode())
207 LOG_ERROR("GenericCommunicator", "Initializing IpcModule failed.");
210 LOG_DEBUG("GenericCommunicator", "Initializing IpcModule success.");
212 m_running = ILM_TRUE;
213 pluginSetHealth(HealthRunning);
222 void GenericCommunicator::stop()
224 LOG_INFO("GenericCommunicator","stopping");
230 m_ipcModule.destroy();
232 pluginSetHealth(HealthStopped);
235 void GenericCommunicator::process(int timeout_ms)
237 t_ilm_message message = m_ipcModule.receive(timeout_ms);
243 t_ilm_message_type messageType = m_ipcModule.getMessageType(message);
244 t_ilm_const_string name = m_ipcModule.getMessageName(message);
245 t_ilm_client_handle senderHandle = m_ipcModule.getSenderHandle(message);
249 case IpcMessageTypeCommand:
250 if (m_callBackTable.end() != m_callBackTable.find(name))
252 LOG_DEBUG("GenericCommunicator", "received: " << name << " from "
253 << m_executor->getSenderName(senderHandle)
254 << "(" << m_executor->getSenderPid(senderHandle) << ")");
255 CallBackMethod method = m_callBackTable[name].function;
256 (this->*method)(message);
260 LOG_WARNING("GenericCommunicator", "Received unknown command " << name
261 << " from " << m_executor->getSenderName(senderHandle)
262 << "(pid " << m_executor->getSenderPid(senderHandle) << ")");
264 processNotificationQueue();
267 case IpcMessageTypeConnect:
268 LOG_DEBUG("GenericCommunicator", "client " << m_executor->getSenderName(senderHandle)
269 << "(pid " << m_executor->getSenderPid(senderHandle) << ") connected");
272 case IpcMessageTypeDisconnect:
273 LOG_DEBUG("GenericCommunicator", "client " << m_executor->getSenderName(senderHandle)
274 << "(pid " << m_executor->getSenderPid(senderHandle) << ") disconnected");
276 const LayerMap& layers = m_executor->getScene()->getAllLayers();
277 LayerMapConstIterator layerIter = layers.begin();
278 LayerMapConstIterator layerIterEnd = layers.end();
279 for (; layerIter != layerIterEnd; ++layerIter)
281 Layer* layer = layerIter->second;
282 layer->removeNotification(senderHandle);
285 const SurfaceMap& surfaces = m_executor->getScene()->getAllSurfaces();
286 SurfaceMapConstIterator surfaceIter = surfaces.begin();
287 SurfaceMapConstIterator surfaceIterEnd = surfaces.end();
288 for (; surfaceIter != surfaceIterEnd; ++surfaceIter)
290 Surface* surface = surfaceIter->second;
291 surface->removeNotification(senderHandle);
296 case IpcMessageTypeError:
297 LOG_DEBUG("GenericCommunicator", "Received error message " << name << " from "
298 << m_executor->getSenderName(senderHandle)
299 << "(pid " << m_executor->getSenderPid(senderHandle) << ")");
302 case IpcMessageTypeShutdown:
303 case IpcMessageTypeNone:
307 LOG_DEBUG("GenericCommunicator", "Received unknown data from "
308 << m_executor->getSenderName(senderHandle)
309 << "(pid " << m_executor->getSenderPid(senderHandle) << "), Message type: " << messageType);
312 m_ipcModule.destroyMessage(message);
315 void GenericCommunicator::setdebug(bool onoff)
317 (void)onoff; // TODO: remove, only prevents warning
320 t_ilm_bool GenericCommunicator::threadMainLoop()
326 t_ilm_const_string GenericCommunicator::pluginGetName() const
328 return "GenericCommunicator";
331 void GenericCommunicator::ServiceConnect(t_ilm_message message)
333 t_ilm_message response;
334 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
336 unsigned int processId = 0;
337 char processName[1024];
338 m_ipcModule.getUint(message, &processId);
339 m_ipcModule.getString(message, processName);
341 m_executor->addApplicationReference(clientHandle, new IApplicationReference(processName, processId));
343 LOG_DEBUG("GenericCommunicator", "ServiceConnect called from "
344 << m_executor->getSenderName(clientHandle)
345 << "(" << m_executor->getSenderPid(clientHandle) << ")");
347 response = m_ipcModule.createResponse(message);
348 m_ipcModule.sendToClients(response, &clientHandle, 1);
349 m_ipcModule.destroyMessage(response);
352 void GenericCommunicator::ServiceDisconnect(t_ilm_message message)
354 t_ilm_message response;
355 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
357 LOG_DEBUG("GenericCommunicator", "ServiceDisconnect called from "
358 << m_executor->getSenderName(clientHandle)
359 << "(" << m_executor->getSenderPid(clientHandle) << ")");
361 m_executor->removeApplicationReference(clientHandle);
363 response = m_ipcModule.createResponse(message);
364 m_ipcModule.sendToClients(response, &clientHandle, 1);
365 m_ipcModule.destroyMessage(response);
368 void GenericCommunicator::Debug(t_ilm_message message)
370 t_ilm_message response;
371 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
372 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
373 t_ilm_bool param = ILM_FALSE;
374 m_ipcModule.getBool(message, ¶m);
376 t_ilm_bool status = m_executor->execute(new DebugCommand(clientPid, param));
379 response = m_ipcModule.createResponse(message);
383 response = m_ipcModule.createErrorResponse(message);
384 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
387 m_ipcModule.sendToClients(response, &clientHandle, 1);
388 m_ipcModule.destroyMessage(response);
391 void GenericCommunicator::GetScreenResolution(t_ilm_message message)
393 t_ilm_message response;
394 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
396 m_ipcModule.getUint(message, &screenid);
397 uint* resolution = m_executor->getScreenResolution(screenid);
399 response = m_ipcModule.createResponse(message);
400 m_ipcModule.appendUint(response, resolution[0]);
401 m_ipcModule.appendUint(response, resolution[1]);
402 m_ipcModule.sendToClients(response, &clientHandle, 1);
403 m_ipcModule.destroyMessage(response);
406 void GenericCommunicator::GetNumberOfHardwareLayers(t_ilm_message message)
408 t_ilm_message response;
409 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
411 m_ipcModule.getUint(message, &screenid);
412 uint numberOfHardwareLayers = m_executor->getNumberOfHardwareLayers(screenid);
413 response = m_ipcModule.createResponse(message);
414 m_ipcModule.appendUint(response, numberOfHardwareLayers);
415 m_ipcModule.sendToClients(response, &clientHandle, 1);
416 m_ipcModule.destroyMessage(response);
419 void GenericCommunicator::GetScreenIDs(t_ilm_message message)
421 t_ilm_message response;
422 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
424 uint* IDs = m_executor->getScreenIDs(&length);
425 response = m_ipcModule.createResponse(message);
426 m_ipcModule.appendUintArray(response, IDs, length);
427 m_ipcModule.sendToClients(response, &clientHandle, 1);
428 m_ipcModule.destroyMessage(response);
431 void GenericCommunicator::ScreenShot(t_ilm_message message)
433 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
434 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
435 t_ilm_message response;
439 m_ipcModule.getUint(message, &screenid);
440 m_ipcModule.getString(message, filename);
442 t_ilm_bool status = m_executor->execute(new ScreenDumpCommand(clientPid, filename, screenid));
445 response = m_ipcModule.createResponse(message);
449 response = m_ipcModule.createErrorResponse(message);
450 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
453 m_ipcModule.sendToClients(response, &clientHandle, 1);
454 m_ipcModule.destroyMessage(response);
457 void GenericCommunicator::ScreenShotOfLayer(t_ilm_message message)
459 t_ilm_message response;
460 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
461 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
463 m_ipcModule.getString(message, filename);
465 m_ipcModule.getUint(message, &layerid);
467 t_ilm_bool status = m_executor->execute(new LayerDumpCommand(clientPid, filename, layerid));
470 response = m_ipcModule.createResponse(message);
474 response = m_ipcModule.createErrorResponse(message);
475 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
478 m_ipcModule.sendToClients(response, &clientHandle, 1);
479 m_ipcModule.destroyMessage(response);
482 void GenericCommunicator::ScreenShotOfSurface(t_ilm_message message)
484 t_ilm_message response;
485 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
486 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
488 m_ipcModule.getString(message, filename);
490 m_ipcModule.getUint(message, &id);
491 t_ilm_bool status = m_executor->execute(new SurfaceDumpCommand(clientPid, filename, id));
494 response = m_ipcModule.createResponse(message);
498 response = m_ipcModule.createErrorResponse(message);
499 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
502 m_ipcModule.sendToClients(response, &clientHandle, 1);
503 m_ipcModule.destroyMessage(response);
506 void GenericCommunicator::ListAllLayerIDS(t_ilm_message message)
508 t_ilm_message response;
509 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
512 m_executor->getScene()->lockScene();
513 m_executor->getScene()->getLayerIDs(&length, &array);
514 m_executor->getScene()->unlockScene();
515 response = m_ipcModule.createResponse(message);
516 m_ipcModule.appendUintArray(response, array, length);
517 m_ipcModule.sendToClients(response, &clientHandle, 1);
518 m_ipcModule.destroyMessage(response);
521 void GenericCommunicator::ListAllLayerIDsOnScreen(t_ilm_message message)
523 t_ilm_message response;
524 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
526 m_ipcModule.getUint(message, &screenID);
530 m_executor->getScene()->lockScene();
531 t_ilm_bool status = m_executor->getScene()->getLayerIDsOfScreen(screenID, &length, &array);
532 m_executor->getScene()->unlockScene();
535 response = m_ipcModule.createResponse(message);
536 m_ipcModule.appendUintArray(response, array, length);
540 response = m_ipcModule.createErrorResponse(message);
541 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
544 m_ipcModule.sendToClients(response, &clientHandle, 1);
545 m_ipcModule.destroyMessage(response);
548 void GenericCommunicator::ListAllSurfaceIDS(t_ilm_message message)
550 t_ilm_message response;
551 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
554 m_executor->getScene()->lockScene();
555 m_executor->getScene()->getSurfaceIDs(&length, &array);
556 m_executor->getScene()->unlockScene();
557 response = m_ipcModule.createResponse(message);
558 m_ipcModule.appendUintArray(response, array, length);
559 m_ipcModule.sendToClients(response, &clientHandle, 1);
560 m_ipcModule.destroyMessage(response);
563 void GenericCommunicator::ListSurfaceofLayer(t_ilm_message message)
565 t_ilm_message response;
566 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
568 m_ipcModule.getUint(message, &id);
569 m_executor->getScene()->lockScene();
570 Layer* layer = m_executor->getScene()->getLayer(id);
573 std::list<Surface*> surfaces = layer->getAllSurfaces();
575 uint length = surfaces.size();
576 uint* array = new uint[length];
579 for (std::list<Surface*>::const_iterator it = surfaces.begin(); it != surfaces.end(); ++it)
582 array[arrayPos] = s->getID();
585 m_executor->getScene()->unlockScene();
587 response = m_ipcModule.createResponse(message);
588 m_ipcModule.appendUintArray(response, array, length);
592 m_executor->getScene()->unlockScene();
593 response = m_ipcModule.createErrorResponse(message);
594 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
597 m_ipcModule.sendToClients(response, &clientHandle, 1);
598 m_ipcModule.destroyMessage(response);
601 void GenericCommunicator::GetPropertiesOfSurface(t_ilm_message message)
603 t_ilm_message response;
604 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
606 m_ipcModule.getUint(message, &id);
608 Surface* surface = m_executor->getScene()->getSurface(id);
611 Rectangle dest = surface->getDestinationRegion();
612 Rectangle src = surface->getSourceRegion();
613 OrientationType orientation = surface->getOrientation();
614 unsigned char chromaKeyRed = 0;
615 unsigned char chromaKeyGreen = 0;
616 unsigned char chromaKeyBlue = 0;
617 surface->getChromaKey(chromaKeyRed, chromaKeyGreen, chromaKeyBlue);
619 response = m_ipcModule.createResponse(message);
620 m_ipcModule.appendDouble(response, surface->getOpacity());
621 m_ipcModule.appendUint(response, src.x);
622 m_ipcModule.appendUint(response, src.y);
623 m_ipcModule.appendUint(response, src.width);
624 m_ipcModule.appendUint(response, src.height);
625 m_ipcModule.appendUint(response, surface->OriginalSourceWidth);
626 m_ipcModule.appendUint(response, surface->OriginalSourceHeight);
627 m_ipcModule.appendUint(response, dest.x);
628 m_ipcModule.appendUint(response, dest.y);
629 m_ipcModule.appendUint(response, dest.width);
630 m_ipcModule.appendUint(response, dest.height);
631 m_ipcModule.appendUint(response, orientation);
632 m_ipcModule.appendBool(response, surface->getVisibility());
633 m_ipcModule.appendUint(response, surface->frameCounter);
634 m_ipcModule.appendUint(response, surface->drawCounter);
635 m_ipcModule.appendUint(response, surface->updateCounter);
636 m_ipcModule.appendUint(response, surface->getPixelFormat());
637 m_ipcModule.appendUint(response, surface->getNativeContent());
638 m_ipcModule.appendUint(response, surface->getInputEventAcceptanceOnDevices());
639 m_ipcModule.appendBool(response, surface->getChromaKeyEnabled());
640 m_ipcModule.appendUint(response, chromaKeyRed);
641 m_ipcModule.appendUint(response, chromaKeyGreen);
642 m_ipcModule.appendUint(response, chromaKeyBlue);
643 m_ipcModule.appendInt(response, surface->getCreatorPid());
647 response = m_ipcModule.createErrorResponse(message);
648 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
651 m_ipcModule.sendToClients(response, &clientHandle, 1);
652 m_ipcModule.destroyMessage(response);
655 void GenericCommunicator::GetPropertiesOfLayer(t_ilm_message message)
657 t_ilm_message response;
658 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
660 m_ipcModule.getUint(message, &id);
662 Layer* layer = m_executor->getScene()->getLayer(id);
665 Rectangle dest = layer->getDestinationRegion();
666 Rectangle src = layer->getSourceRegion();
667 OrientationType orientation = layer->getOrientation();
668 unsigned char chromaKeyRed = 0;
669 unsigned char chromaKeyGreen = 0;
670 unsigned char chromaKeyBlue = 0;
671 layer->getChromaKey(chromaKeyRed, chromaKeyGreen, chromaKeyBlue);
673 response = m_ipcModule.createResponse(message);
674 m_ipcModule.appendDouble(response, layer->getOpacity());
675 m_ipcModule.appendUint(response, src.x);
676 m_ipcModule.appendUint(response, src.y);
677 m_ipcModule.appendUint(response, src.width);
678 m_ipcModule.appendUint(response, src.height);
679 m_ipcModule.appendUint(response, layer->OriginalSourceWidth);
680 m_ipcModule.appendUint(response, layer->OriginalSourceHeight);
681 m_ipcModule.appendUint(response, dest.x);
682 m_ipcModule.appendUint(response, dest.y);
683 m_ipcModule.appendUint(response, dest.width);
684 m_ipcModule.appendUint(response, dest.height);
685 m_ipcModule.appendUint(response, orientation);
686 m_ipcModule.appendBool(response, layer->getVisibility());
687 m_ipcModule.appendUint(response, layer->getLayerType());
688 m_ipcModule.appendBool(response, layer->getChromaKeyEnabled());
689 m_ipcModule.appendUint(response, chromaKeyRed);
690 m_ipcModule.appendUint(response, chromaKeyGreen);
691 m_ipcModule.appendUint(response, chromaKeyBlue);
692 m_ipcModule.appendInt(response, layer->getCreatorPid());
696 response = m_ipcModule.createErrorResponse(message);
697 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
700 m_ipcModule.sendToClients(response, &clientHandle, 1);
701 m_ipcModule.destroyMessage(response);
704 void GenericCommunicator::CreateSurface(t_ilm_message message)
706 t_ilm_message response;
707 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
708 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
712 uint pixelformat = 0;
713 PixelFormat pf = PIXELFORMAT_UNKNOWN;
714 uint id = GraphicalObject::INVALID_ID;
716 m_ipcModule.getUint(message, &handle);
717 m_ipcModule.getUint(message, &width);
718 m_ipcModule.getUint(message, &height);
719 m_ipcModule.getUint(message, &pixelformat);
721 pf = (PixelFormat) pixelformat;
724 // First of all create the surface
725 t_ilm_bool status = m_executor->execute(new SurfaceCreateCommand(clientPid, &id));
727 // after that apply the native content
728 status &= m_executor->execute(new SurfaceSetNativeContentCommand(clientPid, id, handle, pf, width, height));
732 response = m_ipcModule.createResponse(message);
733 m_ipcModule.appendUint(response, id);
737 response = m_ipcModule.createErrorResponse(message);
738 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
741 m_ipcModule.sendToClients(response, &clientHandle, 1);
742 m_ipcModule.destroyMessage(response);
745 void GenericCommunicator::CreateSurfaceFromId(t_ilm_message message)
747 t_ilm_message response;
748 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
749 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
753 uint pixelformat = 0;
754 PixelFormat pf = PIXELFORMAT_UNKNOWN;
757 m_ipcModule.getUint(message, &handle);
758 m_ipcModule.getUint(message, &width);
759 m_ipcModule.getUint(message, &height);
760 m_ipcModule.getUint(message, &pixelformat);
761 m_ipcModule.getUint(message, &id);
763 pf = (PixelFormat) pixelformat;
765 // First of all create the surface
766 t_ilm_bool status = m_executor->execute(new SurfaceCreateCommand(clientPid, &id));
768 // after that apply the native content
769 status &= m_executor->execute(new SurfaceSetNativeContentCommand(clientPid, id, handle, pf, width, height));
773 response = m_ipcModule.createResponse(message);
774 m_ipcModule.appendUint(response, id);
778 response = m_ipcModule.createErrorResponse(message);
779 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
782 m_ipcModule.sendToClients(response, &clientHandle, 1);
783 m_ipcModule.destroyMessage(response);
786 void GenericCommunicator::InitializeSurface(t_ilm_message message)
788 t_ilm_message response;
789 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
790 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
791 uint id = GraphicalObject::INVALID_ID;
793 t_ilm_bool status = m_executor->execute(new SurfaceCreateCommand(clientPid, &id));
796 response = m_ipcModule.createResponse(message);
797 m_ipcModule.appendUint(response, id);
801 response = m_ipcModule.createErrorResponse(message);
802 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
805 m_ipcModule.sendToClients(response, &clientHandle, 1);
806 m_ipcModule.destroyMessage(response);
809 void GenericCommunicator::InitializeSurfaceFromId(t_ilm_message message)
811 t_ilm_message response;
812 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
813 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
815 m_ipcModule.getUint(message, &id);
816 t_ilm_bool status = m_executor->execute(new SurfaceCreateCommand(clientPid, &id));
819 response = m_ipcModule.createResponse(message);
820 m_ipcModule.appendUint(response, id);
824 response = m_ipcModule.createErrorResponse(message);
825 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
828 m_ipcModule.sendToClients(response, &clientHandle, 1);
829 m_ipcModule.destroyMessage(response);
832 void GenericCommunicator::SetSurfaceNativeContent(t_ilm_message message)
834 t_ilm_message response;
835 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
836 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
841 uint pixelformat = 0;
842 PixelFormat pf = PIXELFORMAT_UNKNOWN;
844 m_ipcModule.getUint(message, &id);
845 m_ipcModule.getUint(message, &handle);
846 m_ipcModule.getUint(message, &width);
847 m_ipcModule.getUint(message, &height);
848 m_ipcModule.getUint(message, &pixelformat);
850 pf = (PixelFormat) pixelformat;
852 t_ilm_bool status = m_executor->execute(new SurfaceSetNativeContentCommand(clientPid, id, handle, pf, width, height));
855 response = m_ipcModule.createResponse(message);
859 response = m_ipcModule.createErrorResponse(message);
860 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
863 m_ipcModule.sendToClients(response, &clientHandle, 1);
864 m_ipcModule.destroyMessage(response);
867 void GenericCommunicator::RemoveSurfaceNativeContent(t_ilm_message message)
869 t_ilm_message response;
870 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
871 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
873 m_ipcModule.getUint(message, &id);
875 t_ilm_bool status = m_executor->execute(new SurfaceRemoveNativeContentCommand(clientPid, id));
878 response = m_ipcModule.createResponse(message);
882 response = m_ipcModule.createErrorResponse(message);
883 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
886 m_ipcModule.sendToClients(response, &clientHandle, 1);
887 m_ipcModule.destroyMessage(response);
890 void GenericCommunicator::RemoveSurface(t_ilm_message message)
892 t_ilm_message response;
893 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
894 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
896 m_ipcModule.getUint(message, ¶m);
897 t_ilm_bool status = m_executor->execute(new SurfaceRemoveCommand(clientPid, param));
900 response = m_ipcModule.createResponse(message);
904 response = m_ipcModule.createErrorResponse(message);
905 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
908 m_ipcModule.sendToClients(response, &clientHandle, 1);
909 m_ipcModule.destroyMessage(response);
912 void GenericCommunicator::CreateLayer(t_ilm_message message)
914 t_ilm_message response;
915 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
916 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
917 uint id = GraphicalObject::INVALID_ID;
918 // use resolution of default screen as default width and height of layers
919 uint* resolution = m_executor->getScreenResolution(DEFAULT_SCREEN);
920 t_ilm_bool status = m_executor->execute(new LayerCreateCommand(clientPid, resolution[0], resolution[1], &id));
923 response = m_ipcModule.createResponse(message);
924 m_ipcModule.appendUint(response, id);
928 response = m_ipcModule.createErrorResponse(message);
929 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
932 m_ipcModule.sendToClients(response, &clientHandle, 1);
933 m_ipcModule.destroyMessage(response);
936 void GenericCommunicator::CreateLayerFromId(t_ilm_message message)
938 t_ilm_message response;
939 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
940 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
941 uint id = GraphicalObject::INVALID_ID;
943 m_ipcModule.getUint(message, &id);
944 // use resolution of default screen as default width and height of layers
945 uint* resolution = m_executor->getScreenResolution(DEFAULT_SCREEN);
946 t_ilm_bool status = m_executor->execute(new LayerCreateCommand(clientPid, resolution[0], resolution[1], &id));
949 response = m_ipcModule.createResponse(message);
950 m_ipcModule.appendUint(response, id);
954 response = m_ipcModule.createErrorResponse(message);
955 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
958 m_ipcModule.sendToClients(response, &clientHandle, 1);
959 m_ipcModule.destroyMessage(response);
963 void GenericCommunicator::CreateLayerWithDimension(t_ilm_message message)
965 t_ilm_message response;
966 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
967 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
969 m_ipcModule.getUint(message, &width);
971 m_ipcModule.getUint(message, &height);
973 uint id = GraphicalObject::INVALID_ID;
974 t_ilm_bool status = m_executor->execute(new LayerCreateCommand(clientPid, width, height, &id));
977 response = m_ipcModule.createResponse(message);
978 m_ipcModule.appendUint(response, id);
982 response = m_ipcModule.createErrorResponse(message);
983 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
986 m_ipcModule.sendToClients(response, &clientHandle, 1);
987 m_ipcModule.destroyMessage(response);
990 void GenericCommunicator::CreateLayerFromIdWithDimension(t_ilm_message message)
992 t_ilm_message response;
993 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
994 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
995 uint id = GraphicalObject::INVALID_ID;
998 t_ilm_bool status = ILM_FALSE;
1000 m_ipcModule.getUint(message, &id);
1001 m_ipcModule.getUint(message, &width);
1002 m_ipcModule.getUint(message, &height);
1004 status = m_executor->execute(new LayerCreateCommand(clientPid, width, height, &id));
1007 response = m_ipcModule.createResponse(message);
1008 m_ipcModule.appendUint(response, id);
1012 response = m_ipcModule.createErrorResponse(message);
1013 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
1016 m_ipcModule.sendToClients(response, &clientHandle, 1);
1017 m_ipcModule.destroyMessage(response);
1020 void GenericCommunicator::RemoveLayer(t_ilm_message message)
1022 t_ilm_message response;
1023 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1024 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1026 m_ipcModule.getUint(message, ¶m);
1027 t_ilm_bool status = m_executor->execute(new LayerRemoveCommand(clientPid, param));
1030 response = m_ipcModule.createResponse(message);
1034 response = m_ipcModule.createErrorResponse(message);
1035 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1038 m_ipcModule.sendToClients(response, &clientHandle, 1);
1039 m_ipcModule.destroyMessage(response);
1042 void GenericCommunicator::AddSurfaceToLayer(t_ilm_message message)
1044 t_ilm_message response;
1045 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1046 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1050 m_ipcModule.getUint(message, &surfaceid);
1051 m_ipcModule.getUint(message, &layer);
1053 t_ilm_bool status = m_executor->execute(new LayerAddSurfaceCommand(clientPid, layer, surfaceid));
1056 response = m_ipcModule.createResponse(message);
1060 response = m_ipcModule.createErrorResponse(message);
1061 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
1064 m_ipcModule.sendToClients(response, &clientHandle, 1);
1065 m_ipcModule.destroyMessage(response);
1068 void GenericCommunicator::RemoveSurfaceFromLayer(t_ilm_message message)
1070 t_ilm_message response;
1071 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1072 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1075 m_ipcModule.getUint(message, &surfaceid);
1076 m_ipcModule.getUint(message, &layerid);
1078 t_ilm_bool status = m_executor->execute(new LayerRemoveSurfaceCommand(clientPid, layerid, surfaceid));
1081 response = m_ipcModule.createResponse(message);
1085 response = m_ipcModule.createErrorResponse(message);
1086 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1089 m_ipcModule.sendToClients(response, &clientHandle, 1);
1090 m_ipcModule.destroyMessage(response);
1093 void GenericCommunicator::SetSurfaceSourceRegion(t_ilm_message message)
1095 t_ilm_message response;
1096 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1097 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1104 m_ipcModule.getUint(message, &id);
1105 m_ipcModule.getUint(message, &x);
1106 m_ipcModule.getUint(message, &y);
1107 m_ipcModule.getUint(message, &width);
1108 m_ipcModule.getUint(message, &height);
1110 t_ilm_bool status = m_executor->execute(new SurfaceSetSourceRectangleCommand(clientPid, id, x, y, width, height));
1113 response = m_ipcModule.createResponse(message);
1117 response = m_ipcModule.createErrorResponse(message);
1118 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1121 m_ipcModule.sendToClients(response, &clientHandle, 1);
1122 m_ipcModule.destroyMessage(response);
1125 void GenericCommunicator::SetLayerSourceRegion(t_ilm_message message)
1127 t_ilm_message response;
1128 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1129 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1136 m_ipcModule.getUint(message, &id);
1137 m_ipcModule.getUint(message, &x);
1138 m_ipcModule.getUint(message, &y);
1139 m_ipcModule.getUint(message, &width);
1140 m_ipcModule.getUint(message, &height);
1142 t_ilm_bool status = m_executor->execute(new LayerSetSourceRectangleCommand(clientPid, id, x, y, width, height));
1145 response = m_ipcModule.createResponse(message);
1149 response = m_ipcModule.createErrorResponse(message);
1150 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1153 m_ipcModule.sendToClients(response, &clientHandle, 1);
1154 m_ipcModule.destroyMessage(response);
1157 void GenericCommunicator::SetSurfaceDestinationRegion(t_ilm_message message)
1159 t_ilm_message response;
1160 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1161 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1168 m_ipcModule.getUint(message, &id);
1169 m_ipcModule.getUint(message, &x);
1170 m_ipcModule.getUint(message, &y);
1171 m_ipcModule.getUint(message, &width);
1172 m_ipcModule.getUint(message, &height);
1174 t_ilm_bool status = m_executor->execute(new SurfaceSetDestinationRectangleCommand(clientPid, id, x, y, width, height));
1177 response = m_ipcModule.createResponse(message);
1181 response = m_ipcModule.createErrorResponse(message);
1182 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1185 m_ipcModule.sendToClients(response, &clientHandle, 1);
1186 m_ipcModule.destroyMessage(response);
1189 void GenericCommunicator::SetSurfacePosition(t_ilm_message message)
1191 t_ilm_message response;
1192 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1193 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1198 m_ipcModule.getUint(message, &id);
1199 m_ipcModule.getUint(message, &x);
1200 m_ipcModule.getUint(message, &y);
1202 t_ilm_bool status = m_executor->execute(new SurfaceSetPositionCommand(clientPid, id, x, y));
1205 response = m_ipcModule.createResponse(message);
1209 response = m_ipcModule.createErrorResponse(message);
1210 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1213 m_ipcModule.sendToClients(response, &clientHandle, 1);
1214 m_ipcModule.destroyMessage(response);
1217 void GenericCommunicator::GetSurfacePosition(t_ilm_message message)
1219 t_ilm_message response;
1220 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1221 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1226 m_ipcModule.getUint(message, &id);
1228 t_ilm_bool status = m_executor->execute(new SurfaceGetPositionCommand(clientPid, id, &x, &y));
1231 response = m_ipcModule.createResponse(message);
1232 m_ipcModule.appendUint(response, x);
1233 m_ipcModule.appendUint(response, y);
1237 response = m_ipcModule.createErrorResponse(message);
1238 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1241 m_ipcModule.sendToClients(response, &clientHandle, 1);
1242 m_ipcModule.destroyMessage(response);
1245 void GenericCommunicator::SetSurfaceDimension(t_ilm_message message)
1247 t_ilm_message response;
1248 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1249 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1254 m_ipcModule.getUint(message, &id);
1255 m_ipcModule.getUint(message, &width);
1256 m_ipcModule.getUint(message, &height);
1258 t_ilm_bool status = m_executor->execute(new SurfaceSetDimensionCommand(clientPid, id, width, height));
1261 response = m_ipcModule.createResponse(message);
1265 response = m_ipcModule.createErrorResponse(message);
1266 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1269 m_ipcModule.sendToClients(response, &clientHandle, 1);
1270 m_ipcModule.destroyMessage(response);
1273 void GenericCommunicator::SetLayerDestinationRegion(t_ilm_message message)
1275 t_ilm_message response;
1276 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1277 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1284 m_ipcModule.getUint(message, &id);
1285 m_ipcModule.getUint(message, &x);
1286 m_ipcModule.getUint(message, &y);
1287 m_ipcModule.getUint(message, &width);
1288 m_ipcModule.getUint(message, &height);
1290 t_ilm_bool status = m_executor->execute(new LayerSetDestinationRectangleCommand(clientPid, id, x, y, width, height));
1293 response = m_ipcModule.createResponse(message);
1297 response = m_ipcModule.createErrorResponse(message);
1298 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1301 m_ipcModule.sendToClients(response, &clientHandle, 1);
1302 m_ipcModule.destroyMessage(response);
1305 void GenericCommunicator::SetLayerPosition(t_ilm_message message)
1307 t_ilm_message response;
1308 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1309 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1314 m_ipcModule.getUint(message, &id);
1315 m_ipcModule.getUint(message, &x);
1316 m_ipcModule.getUint(message, &y);
1318 t_ilm_bool status = m_executor->execute(new LayerSetPositionCommand(clientPid, id, x, y));
1321 response = m_ipcModule.createResponse(message);
1325 response = m_ipcModule.createErrorResponse(message);
1326 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1329 m_ipcModule.sendToClients(response, &clientHandle, 1);
1330 m_ipcModule.destroyMessage(response);
1333 void GenericCommunicator::GetLayerPosition(t_ilm_message message)
1335 t_ilm_message response;
1336 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1337 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1342 m_ipcModule.getUint(message, &id);
1344 t_ilm_bool status = m_executor->execute(new LayerGetPositionCommand(clientPid, id, &x, &y));
1347 response = m_ipcModule.createResponse(message);
1348 m_ipcModule.appendUint(response, x);
1349 m_ipcModule.appendUint(response, y);
1353 response = m_ipcModule.createErrorResponse(message);
1354 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1357 m_ipcModule.sendToClients(response, &clientHandle, 1);
1358 m_ipcModule.destroyMessage(response);
1361 void GenericCommunicator::SetLayerDimension(t_ilm_message message)
1363 t_ilm_message response;
1364 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1365 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1370 m_ipcModule.getUint(message, &id);
1371 m_ipcModule.getUint(message, &width);
1372 m_ipcModule.getUint(message, &height);
1374 t_ilm_bool status = m_executor->execute(new LayerSetDimensionCommand(clientPid, id, width, height));
1377 response = m_ipcModule.createResponse(message);
1381 response = m_ipcModule.createErrorResponse(message);
1382 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1385 m_ipcModule.sendToClients(response, &clientHandle, 1);
1386 m_ipcModule.destroyMessage(response);
1389 void GenericCommunicator::GetLayerDimension(t_ilm_message message)
1391 t_ilm_message response;
1392 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1393 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1398 m_ipcModule.getUint(message, &id);
1400 t_ilm_bool status = m_executor->execute(new LayerGetDimensionCommand(clientPid, id, &width, &height));
1403 response = m_ipcModule.createResponse(message);
1404 m_ipcModule.appendUint(response, width);
1405 m_ipcModule.appendUint(response, height);
1409 response = m_ipcModule.createErrorResponse(message);
1410 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1413 m_ipcModule.sendToClients(response, &clientHandle, 1);
1414 m_ipcModule.destroyMessage(response);
1417 void GenericCommunicator::GetSurfaceDimension(t_ilm_message message)
1419 t_ilm_message response;
1420 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1421 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1426 m_ipcModule.getUint(message, &id);
1428 t_ilm_bool status = m_executor->execute(new SurfaceGetDimensionCommand(clientPid, id, &width, &height));
1431 response = m_ipcModule.createResponse(message);
1432 m_ipcModule.appendUint(response, width);
1433 m_ipcModule.appendUint(response, height);
1437 response = m_ipcModule.createErrorResponse(message);
1438 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1441 m_ipcModule.sendToClients(response, &clientHandle, 1);
1442 m_ipcModule.destroyMessage(response);
1445 void GenericCommunicator::SetSurfaceOpacity(t_ilm_message message)
1447 t_ilm_message response;
1448 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1449 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1453 m_ipcModule.getUint(message, &id);
1454 m_ipcModule.getDouble(message, ¶m);
1456 t_ilm_bool status = m_executor->execute(new SurfaceSetOpacityCommand(clientPid, id, param));
1459 response = m_ipcModule.createResponse(message);
1463 response = m_ipcModule.createErrorResponse(message);
1464 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1467 m_ipcModule.sendToClients(response, &clientHandle, 1);
1468 m_ipcModule.destroyMessage(response);
1471 void GenericCommunicator::SetLayerOpacity(t_ilm_message message)
1473 t_ilm_message response;
1474 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1475 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1479 m_ipcModule.getUint(message, &id);
1480 m_ipcModule.getDouble(message, ¶m);
1482 t_ilm_bool status = m_executor->execute(new LayerSetOpacityCommand(clientPid, id, param));
1485 response = m_ipcModule.createResponse(message);
1489 response = m_ipcModule.createErrorResponse(message);
1490 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1493 m_ipcModule.sendToClients(response, &clientHandle, 1);
1494 m_ipcModule.destroyMessage(response);
1497 void GenericCommunicator::GetSurfaceOpacity(t_ilm_message message)
1499 t_ilm_message response;
1500 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1501 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1505 m_ipcModule.getUint(message, &id);
1507 t_ilm_bool status = m_executor->execute(new SurfaceGetOpacityCommand(clientPid, id, ¶m));
1510 response = m_ipcModule.createResponse(message);
1511 m_ipcModule.appendDouble(response, param);
1515 response = m_ipcModule.createErrorResponse(message);
1516 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1519 m_ipcModule.sendToClients(response, &clientHandle, 1);
1520 m_ipcModule.destroyMessage(response);
1523 void GenericCommunicator::GetLayerOpacity(t_ilm_message message)
1525 t_ilm_message response;
1526 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1527 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1531 m_ipcModule.getUint(message, &id);
1533 t_ilm_bool status = m_executor->execute(new LayerGetOpacityCommand(clientPid, id, ¶m));
1536 response = m_ipcModule.createResponse(message);
1537 m_ipcModule.appendDouble(response, param);
1541 response = m_ipcModule.createErrorResponse(message);
1542 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1545 m_ipcModule.sendToClients(response, &clientHandle, 1);
1546 m_ipcModule.destroyMessage(response);
1549 void GenericCommunicator::SetSurfaceOrientation(t_ilm_message message)
1551 t_ilm_message response;
1552 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1553 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1556 OrientationType o = Zero;
1558 m_ipcModule.getUint(message, &id);
1559 m_ipcModule.getUint(message, ¶m);
1561 o = (OrientationType) param;
1563 t_ilm_bool status = m_executor->execute(new SurfaceSetOrientationCommand(clientPid, id, o));
1566 response = m_ipcModule.createResponse(message);
1570 response = m_ipcModule.createErrorResponse(message);
1571 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1574 m_ipcModule.sendToClients(response, &clientHandle, 1);
1575 m_ipcModule.destroyMessage(response);
1578 void GenericCommunicator::GetSurfaceOrientation(t_ilm_message message)
1580 t_ilm_message response;
1581 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1582 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1586 m_ipcModule.getUint(message, &id);
1588 t_ilm_bool status = m_executor->execute(new SurfaceGetOrientationCommand(clientPid, id, &o));
1591 response = m_ipcModule.createResponse(message);
1592 m_ipcModule.appendUint(response, o);
1596 response = m_ipcModule.createErrorResponse(message);
1597 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1600 m_ipcModule.sendToClients(response, &clientHandle, 1);
1601 m_ipcModule.destroyMessage(response);
1604 void GenericCommunicator::SetLayerOrientation(t_ilm_message message)
1606 t_ilm_message response;
1607 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1608 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1611 OrientationType o = Zero;
1613 m_ipcModule.getUint(message, &id);
1614 m_ipcModule.getUint(message, ¶m);
1616 o = (OrientationType) param;
1618 t_ilm_bool status = m_executor->execute(new LayerSetOrientationCommand(clientPid, id, o));
1621 response = m_ipcModule.createResponse(message);
1625 response = m_ipcModule.createErrorResponse(message);
1626 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1629 m_ipcModule.sendToClients(response, &clientHandle, 1);
1630 m_ipcModule.destroyMessage(response);
1633 void GenericCommunicator::GetLayerOrientation(t_ilm_message message)
1635 t_ilm_message response;
1636 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1637 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1641 m_ipcModule.getUint(message, &id);
1643 t_ilm_bool status = m_executor->execute(new LayerGetOrientationCommand(clientPid, id, &o));
1646 response = m_ipcModule.createResponse(message);
1647 m_ipcModule.appendUint(response, o);
1651 response = m_ipcModule.createErrorResponse(message);
1652 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1655 m_ipcModule.sendToClients(response, &clientHandle, 1);
1656 m_ipcModule.destroyMessage(response);
1659 void GenericCommunicator::GetSurfacePixelformat(t_ilm_message message)
1661 t_ilm_message response;
1662 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1663 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1665 PixelFormat pixelFormat;
1667 m_ipcModule.getUint(message, &id);
1669 t_ilm_bool status = m_executor->execute(new SurfaceGetPixelformatCommand(clientPid, id, &pixelFormat));
1672 response = m_ipcModule.createResponse(message);
1673 m_ipcModule.appendUint(response, pixelFormat);
1677 response = m_ipcModule.createErrorResponse(message);
1678 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1681 m_ipcModule.sendToClients(response, &clientHandle, 1);
1682 m_ipcModule.destroyMessage(response);
1685 void GenericCommunicator::SetSurfaceVisibility(t_ilm_message message)
1687 t_ilm_message response;
1688 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1689 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1691 t_ilm_bool newVis = ILM_FALSE;
1693 m_ipcModule.getUint(message, &surfaceid);
1694 m_ipcModule.getBool(message, &newVis);
1696 t_ilm_bool status = m_executor->execute(new SurfaceSetVisibilityCommand(clientPid, surfaceid, newVis));
1699 response = m_ipcModule.createResponse(message);
1703 response = m_ipcModule.createErrorResponse(message);
1704 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1707 m_ipcModule.sendToClients(response, &clientHandle, 1);
1708 m_ipcModule.destroyMessage(response);
1711 void GenericCommunicator::SetLayerVisibility(t_ilm_message message)
1713 t_ilm_message response;
1714 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1715 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1717 t_ilm_bool myparam = ILM_FALSE;
1719 m_ipcModule.getUint(message, &layerid);
1720 m_ipcModule.getBool(message, &myparam);
1722 t_ilm_bool status = m_executor->execute(new LayerSetVisibilityCommand(clientPid, layerid, myparam));
1725 response = m_ipcModule.createResponse(message);
1729 response = m_ipcModule.createErrorResponse(message);
1730 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1733 m_ipcModule.sendToClients(response, &clientHandle, 1);
1734 m_ipcModule.destroyMessage(response);
1737 void GenericCommunicator::GetSurfaceVisibility(t_ilm_message message)
1739 t_ilm_message response;
1740 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1741 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1745 m_ipcModule.getUint(message, &id);
1747 t_ilm_bool status = m_executor->execute(new SurfaceGetVisibilityCommand(clientPid, id, &visibility));
1750 response = m_ipcModule.createResponse(message);
1751 m_ipcModule.appendBool(response, visibility);
1755 response = m_ipcModule.createErrorResponse(message);
1756 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1759 m_ipcModule.sendToClients(response, &clientHandle, 1);
1760 m_ipcModule.destroyMessage(response);
1763 void GenericCommunicator::GetLayerVisibility(t_ilm_message message)
1765 t_ilm_message response;
1766 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1767 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1771 m_ipcModule.getUint(message, &id);
1773 t_ilm_bool status = m_executor->execute(new LayerGetVisibilityCommand(clientPid, id, &visibility));
1776 response = m_ipcModule.createResponse(message);
1777 m_ipcModule.appendBool(response, visibility);
1781 response = m_ipcModule.createErrorResponse(message);
1782 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1785 m_ipcModule.sendToClients(response, &clientHandle, 1);
1786 m_ipcModule.destroyMessage(response);
1789 void GenericCommunicator::SetRenderOrderOfLayers(t_ilm_message message)
1791 t_ilm_message response;
1792 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1793 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1798 m_ipcModule.getUintArray(message, &array, &length);
1799 m_ipcModule.getUint(message, &screenID);
1801 t_ilm_bool status = m_executor->execute(new ScreenSetRenderOrderCommand(clientPid, screenID, array, length));
1804 response = m_ipcModule.createResponse(message);
1808 response = m_ipcModule.createErrorResponse(message);
1809 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1812 m_ipcModule.sendToClients(response, &clientHandle, 1);
1813 m_ipcModule.destroyMessage(response);
1816 void GenericCommunicator::SetSurfaceRenderOrderWithinLayer(t_ilm_message message)
1818 t_ilm_message response;
1819 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1820 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1825 m_ipcModule.getUint(message, &layerid);
1826 m_ipcModule.getUintArray(message, &array, &length);
1828 t_ilm_bool status = m_executor->execute(new LayerSetRenderOrderCommand(clientPid, layerid, array, length));
1831 response = m_ipcModule.createResponse(message);
1835 response = m_ipcModule.createErrorResponse(message);
1836 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1839 m_ipcModule.sendToClients(response, &clientHandle, 1);
1840 m_ipcModule.destroyMessage(response);
1843 void GenericCommunicator::GetLayerType(t_ilm_message message)
1845 t_ilm_message response;
1846 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1848 m_ipcModule.getUint(message, &id);
1850 Layer* layer = m_executor->getScene()->getLayer(id);
1853 response = m_ipcModule.createResponse(message);
1854 m_ipcModule.appendUint(response, layer->getLayerType());
1858 response = m_ipcModule.createErrorResponse(message);
1859 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1862 m_ipcModule.sendToClients(response, &clientHandle, 1);
1863 m_ipcModule.destroyMessage(response);
1866 void GenericCommunicator::GetLayertypeCapabilities(t_ilm_message message)
1868 t_ilm_message response;
1869 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1871 LayerType type = Unknown;
1873 m_ipcModule.getUint(message, &id);
1875 type = (LayerType) id;
1877 uint capabilities = m_executor->getLayerTypeCapabilities(type);
1878 response = m_ipcModule.createResponse(message);
1879 m_ipcModule.appendUint(response, capabilities);
1880 m_ipcModule.sendToClients(response, &clientHandle, 1);
1881 m_ipcModule.destroyMessage(response);
1884 void GenericCommunicator::GetLayerCapabilities(t_ilm_message message)
1886 t_ilm_message response;
1887 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1889 m_ipcModule.getUint(message, &id);
1891 Layer* layer = m_executor->getScene()->getLayer(id);
1894 response = m_ipcModule.createResponse(message);
1895 m_ipcModule.appendUint(response, layer->getCapabilities());
1899 response = m_ipcModule.createErrorResponse(message);
1900 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1903 m_ipcModule.sendToClients(response, &clientHandle, 1);
1904 m_ipcModule.destroyMessage(response);
1907 void GenericCommunicator::FadeIn(t_ilm_message message)
1909 t_ilm_message response;
1910 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1911 response = m_ipcModule.createErrorResponse(message);
1912 m_ipcModule.appendUint(response, ILM_ERROR_NOT_IMPLEMENTED);
1913 m_ipcModule.sendToClients(response, &clientHandle, 1);
1914 m_ipcModule.destroyMessage(response);
1917 void GenericCommunicator::SynchronizedFade(t_ilm_message message)
1919 t_ilm_message response;
1920 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1921 response = m_ipcModule.createErrorResponse(message);
1922 m_ipcModule.appendUint(response, ILM_ERROR_NOT_IMPLEMENTED);
1923 m_ipcModule.sendToClients(response, &clientHandle, 1);
1924 m_ipcModule.destroyMessage(response);
1927 void GenericCommunicator::FadeOut(t_ilm_message message)
1929 t_ilm_message response;
1930 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1931 response = m_ipcModule.createErrorResponse(message);
1932 m_ipcModule.appendUint(response, ILM_ERROR_NOT_IMPLEMENTED);
1933 m_ipcModule.sendToClients(response, &clientHandle, 1);
1934 m_ipcModule.destroyMessage(response);
1937 void GenericCommunicator::Exit(t_ilm_message message)
1939 t_ilm_message response;
1940 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1941 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1942 t_ilm_bool status = m_executor->execute(new ExitCommand(clientPid));
1945 response = m_ipcModule.createResponse(message);
1949 response = m_ipcModule.createErrorResponse(message);
1950 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
1953 m_ipcModule.sendToClients(response, &clientHandle, 1);
1954 m_ipcModule.destroyMessage(response);
1957 void GenericCommunicator::CommitChanges(t_ilm_message message)
1959 t_ilm_message response;
1960 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1961 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1962 t_ilm_bool status = m_executor->execute(new CommitCommand(clientPid));
1965 response = m_ipcModule.createResponse(message);
1969 response = m_ipcModule.createErrorResponse(message);
1970 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
1973 m_ipcModule.sendToClients(response, &clientHandle, 1);
1974 m_ipcModule.destroyMessage(response);
1977 void GenericCommunicator::CreateShader(t_ilm_message message)
1979 t_ilm_message response;
1980 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1981 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1982 char vertname[1024];
1983 char fragname[1024];
1986 m_ipcModule.getString(message, vertname);
1987 m_ipcModule.getString(message, fragname);
1989 t_ilm_bool status = m_executor->execute(new ShaderCreateCommand(clientPid, vertname, fragname, &id));
1992 response = m_ipcModule.createResponse(message);
1993 m_ipcModule.appendUint(response, id);
1997 response = m_ipcModule.createErrorResponse(message);
1998 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2001 m_ipcModule.sendToClients(response, &clientHandle, 1);
2002 m_ipcModule.destroyMessage(response);
2005 void GenericCommunicator::DestroyShader(t_ilm_message message)
2007 t_ilm_message response;
2008 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2009 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2012 m_ipcModule.getUint(message, &shaderid);
2014 t_ilm_bool status = m_executor->execute(new ShaderDestroyCommand(clientPid, shaderid));
2017 response = m_ipcModule.createResponse(message);
2021 response = m_ipcModule.createErrorResponse(message);
2022 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2025 m_ipcModule.sendToClients(response, &clientHandle, 1);
2026 m_ipcModule.destroyMessage(response);
2029 void GenericCommunicator::SetShader(t_ilm_message message)
2031 t_ilm_message response;
2032 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2033 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2037 m_ipcModule.getUint(message, &surfaceId);
2038 m_ipcModule.getUint(message, &shaderid);
2040 t_ilm_bool status = m_executor->execute(new SurfaceSetShaderCommand(clientPid, surfaceId, shaderid));
2043 response = m_ipcModule.createResponse(message);
2047 response = m_ipcModule.createErrorResponse(message);
2048 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2051 m_ipcModule.sendToClients(response, &clientHandle, 1);
2052 m_ipcModule.destroyMessage(response);
2055 void GenericCommunicator::SetUniforms(t_ilm_message message)
2057 t_ilm_message response;
2058 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2059 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2061 std::vector<string> uniforms;
2063 m_ipcModule.getUint(message, &id);
2066 //m_ipcModule.getStringArray(&uniforms);
2068 t_ilm_bool status = m_executor->execute(new ShaderSetUniformsCommand(clientPid, id, uniforms));
2071 response = m_ipcModule.createResponse(message);
2075 response = m_ipcModule.createErrorResponse(message);
2076 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2079 m_ipcModule.sendToClients(response, &clientHandle, 1);
2080 m_ipcModule.destroyMessage(response);
2083 void GenericCommunicator::SetKeyboardFocusOn(t_ilm_message message)
2085 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2086 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2087 t_ilm_message response;
2090 m_ipcModule.getUint(message, &surfaceId);
2092 t_ilm_bool status = m_executor->execute(new SurfaceSetKeyboardFocusCommand(clientPid, surfaceId));
2095 response = m_ipcModule.createResponse(message);
2099 response = m_ipcModule.createErrorResponse(message);
2100 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2103 m_ipcModule.sendToClients(response, &clientHandle, 1);
2104 m_ipcModule.destroyMessage(response);
2108 void GenericCommunicator::GetKeyboardFocusSurfaceId(t_ilm_message message)
2110 t_ilm_message response;
2111 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2112 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2115 t_ilm_bool status = m_executor->execute(new SurfaceGetKeyboardFocusCommand(clientPid, &surfaceId));
2118 response = m_ipcModule.createResponse(message);
2119 m_ipcModule.appendUint(response, surfaceId);
2123 response = m_ipcModule.createErrorResponse(message);
2124 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2127 m_ipcModule.sendToClients(response, &clientHandle, 1);
2128 m_ipcModule.destroyMessage(response);
2132 void GenericCommunicator::UpdateInputEventAcceptanceOn(t_ilm_message message)
2134 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2135 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2136 t_ilm_message response;
2139 InputDevice devices;
2142 m_ipcModule.getUint(message, &surfaceId);
2143 m_ipcModule.getUint(message, &udevices);
2144 m_ipcModule.getBool(message, &accept);
2146 devices = (InputDevice) udevices;
2148 t_ilm_bool status = m_executor->execute(new SurfaceUpdateInputEventAcceptance(clientPid, surfaceId, devices, accept));
2151 response = m_ipcModule.createResponse(message);
2155 response = m_ipcModule.createErrorResponse(message);
2156 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2159 m_ipcModule.sendToClients(response, &clientHandle, 1);
2160 m_ipcModule.destroyMessage(response);
2163 void GenericCommunicator::SetSurfaceChromaKey(t_ilm_message message)
2165 t_ilm_message response;
2166 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2167 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2172 m_ipcModule.getUint(message, &surfaceid);
2173 m_ipcModule.getUintArray(message, &array, &length);
2175 t_ilm_bool status = m_executor->execute(new SurfaceSetChromaKeyCommand(clientPid, surfaceid, array, length));
2178 response = m_ipcModule.createResponse(message);
2182 response = m_ipcModule.createErrorResponse(message);
2183 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2186 m_ipcModule.sendToClients(response, &clientHandle, 1);
2187 m_ipcModule.destroyMessage(response);
2190 void GenericCommunicator::SetLayerChromaKey(t_ilm_message message)
2192 t_ilm_message response;
2193 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2194 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2199 m_ipcModule.getUint(message, &layerid);
2200 m_ipcModule.getUintArray(message, &array, &length);
2202 t_ilm_bool status = m_executor->execute(new LayerSetChromaKeyCommand(clientPid, layerid, array, length));
2205 response = m_ipcModule.createResponse(message);
2209 response = m_ipcModule.createErrorResponse(message);
2210 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2213 m_ipcModule.sendToClients(response, &clientHandle, 1);
2214 m_ipcModule.destroyMessage(response);
2217 void GenericCommunicator::LayerAddNotification(t_ilm_message message)
2219 t_ilm_message response;
2220 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2223 m_ipcModule.getUint(message, &layerid);
2225 Layer* layer = m_executor->getScene()->getLayer(layerid);
2228 layer->addNotification(clientHandle);
2229 response = m_ipcModule.createResponse(message);
2233 response = m_ipcModule.createErrorResponse(message);
2234 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
2237 m_ipcModule.sendToClients(response, &clientHandle, 1);
2238 m_ipcModule.destroyMessage(response);
2241 void GenericCommunicator::SurfaceAddNotification(t_ilm_message message)
2243 t_ilm_message response;
2244 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2247 m_ipcModule.getUint(message, &surfaceid);
2249 Surface* surface = m_executor->getScene()->getSurface(surfaceid);
2252 surface->addNotification(clientHandle);
2253 response = m_ipcModule.createResponse(message);
2257 response = m_ipcModule.createErrorResponse(message);
2258 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
2261 m_ipcModule.sendToClients(response, &clientHandle, 1);
2262 m_ipcModule.destroyMessage(response);
2265 void GenericCommunicator::LayerRemoveNotification(t_ilm_message message)
2267 t_ilm_message response;
2268 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2271 m_ipcModule.getUint(message, &layerid);
2273 Layer* layer = m_executor->getScene()->getLayer(layerid);
2276 layer->removeNotification(clientHandle);
2277 response = m_ipcModule.createResponse(message);
2281 response = m_ipcModule.createErrorResponse(message);
2282 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
2285 m_ipcModule.sendToClients(response, &clientHandle, 1);
2286 m_ipcModule.destroyMessage(response);
2289 void GenericCommunicator::SurfaceRemoveNotification(t_ilm_message message)
2291 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2292 t_ilm_message response;
2295 m_ipcModule.getUint(message, &surfaceid);
2297 Surface* surface = m_executor->getScene()->getSurface(surfaceid);
2300 surface->removeNotification(clientHandle);
2301 response = m_ipcModule.createResponse(message);
2305 response = m_ipcModule.createErrorResponse(message);
2306 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
2309 m_ipcModule.sendToClients(response, &clientHandle, 1);
2310 m_ipcModule.destroyMessage(response);
2313 void GenericCommunicator::processNotificationQueue()
2315 NotificationQueue& notificationQueue = m_executor->getClientNotificationQueue();
2316 NotificationQueue::iterator iter = notificationQueue.begin();
2317 NotificationQueue::iterator end = notificationQueue.end();
2319 for (; iter != end; ++iter)
2321 GraphicalObject* object = iter->first;
2322 t_ilm_notification_mask mask = iter->second;
2323 sendNotification(object, mask);
2325 notificationQueue.clear();
2328 void GenericCommunicator::sendNotification(GraphicalObject* object, t_ilm_notification_mask mask)
2330 switch (object->type)
2334 Layer* layer = static_cast<Layer*>(object);
2337 ApplicationReferenceList& arl = layer->getNotificationClients();
2341 t_ilm_message notification;
2342 Rectangle dest = layer->getDestinationRegion();
2343 Rectangle src = layer->getSourceRegion();
2344 OrientationType orientation = layer->getOrientation();
2346 unsigned char chromaKeyRed = 0;
2347 unsigned char chromaKeyGreen = 0;
2348 unsigned char chromaKeyBlue = 0;
2349 layer->getChromaKey(chromaKeyRed, chromaKeyGreen, chromaKeyBlue);
2351 std::stringstream notificationName;
2352 notificationName << "NotificationForLayer" << layer->getID();
2354 notification = m_ipcModule.createNotification(notificationName.str().c_str());
2355 m_ipcModule.appendUint(notification, layer->getID());
2356 m_ipcModule.appendUint(notification, mask);
2358 m_ipcModule.appendDouble(notification, layer->getOpacity());
2359 m_ipcModule.appendUint(notification, src.x);
2360 m_ipcModule.appendUint(notification, src.y);
2361 m_ipcModule.appendUint(notification, src.width);
2362 m_ipcModule.appendUint(notification, src.height);
2363 m_ipcModule.appendUint(notification, layer->OriginalSourceWidth);
2364 m_ipcModule.appendUint(notification, layer->OriginalSourceHeight);
2365 m_ipcModule.appendUint(notification, dest.x);
2366 m_ipcModule.appendUint(notification, dest.y);
2367 m_ipcModule.appendUint(notification, dest.width);
2368 m_ipcModule.appendUint(notification, dest.height);
2369 m_ipcModule.appendUint(notification, orientation);
2370 m_ipcModule.appendBool(notification, layer->getVisibility());
2371 m_ipcModule.appendUint(notification, layer->getLayerType());
2372 m_ipcModule.appendBool(notification, layer->getChromaKeyEnabled());
2373 m_ipcModule.appendUint(notification, chromaKeyRed);
2374 m_ipcModule.appendUint(notification, chromaKeyGreen);
2375 m_ipcModule.appendUint(notification, chromaKeyBlue);
2376 m_ipcModule.appendInt(notification, layer->getCreatorPid());
2378 int clientCount = arl.size();
2379 t_ilm_client_handle clientArray[256];
2381 ApplicationReferenceList::iterator iter = arl.begin();
2382 ApplicationReferenceList::iterator end = arl.end();
2384 for (int clientNumber = 0;
2385 iter != end, clientNumber < 256;
2386 ++iter, ++clientNumber)
2388 t_ilm_client_handle client = *iter;
2389 clientArray[clientNumber] = client;
2392 LOG_DEBUG("GenericCommunicator", "Sending " << clientCount << " notification(s): layer " << layer->getID() << " was updated.");
2394 if (!m_ipcModule.sendToClients(notification, clientArray, clientCount))
2396 LOG_ERROR("GenericCommunicator", "Sending notification to clients failed.")
2399 m_ipcModule.destroyMessage(notification);
2406 Surface* surface = static_cast<Surface*>(object);
2409 ApplicationReferenceList& arl = surface->getNotificationClients();
2413 t_ilm_message notification;
2414 std::stringstream notificationName;
2415 notificationName << "NotificationForSurface" << surface->getID();
2417 unsigned char chromaKeyRed = 0;
2418 unsigned char chromaKeyGreen = 0;
2419 unsigned char chromaKeyBlue = 0;
2420 surface->getChromaKey(chromaKeyRed, chromaKeyGreen, chromaKeyBlue);
2422 notification = m_ipcModule.createNotification(notificationName.str().c_str());
2423 m_ipcModule.appendUint(notification, surface->getID());
2424 m_ipcModule.appendUint(notification, mask);
2426 m_ipcModule.appendDouble(notification, surface->getOpacity());
2427 m_ipcModule.appendUint(notification, surface->getSourceRegion().x);
2428 m_ipcModule.appendUint(notification, surface->getSourceRegion().y);
2429 m_ipcModule.appendUint(notification, surface->getSourceRegion().width);
2430 m_ipcModule.appendUint(notification, surface->getSourceRegion().height);
2431 m_ipcModule.appendUint(notification, surface->OriginalSourceWidth);
2432 m_ipcModule.appendUint(notification, surface->OriginalSourceHeight);
2433 m_ipcModule.appendUint(notification, surface->getDestinationRegion().x);
2434 m_ipcModule.appendUint(notification, surface->getDestinationRegion().y);
2435 m_ipcModule.appendUint(notification, surface->getDestinationRegion().width);
2436 m_ipcModule.appendUint(notification, surface->getDestinationRegion().height);
2437 m_ipcModule.appendUint(notification, surface->getOrientation());
2438 m_ipcModule.appendBool(notification, surface->getVisibility());
2439 m_ipcModule.appendUint(notification, surface->frameCounter);
2440 m_ipcModule.appendUint(notification, surface->drawCounter);
2441 m_ipcModule.appendUint(notification, surface->updateCounter);
2442 m_ipcModule.appendUint(notification, surface->getPixelFormat());
2443 m_ipcModule.appendUint(notification, surface->getNativeContent());
2444 m_ipcModule.appendUint(notification, surface->getInputEventAcceptanceOnDevices());
2445 m_ipcModule.appendBool(notification, surface->getChromaKeyEnabled());
2446 m_ipcModule.appendUint(notification, chromaKeyRed);
2447 m_ipcModule.appendUint(notification, chromaKeyGreen);
2448 m_ipcModule.appendUint(notification, chromaKeyBlue);
2449 m_ipcModule.appendInt(notification, surface->getCreatorPid());
2451 int clientCount = arl.size();
2452 t_ilm_client_handle clients[256];
2454 ApplicationReferenceList::iterator iter = arl.begin();
2455 ApplicationReferenceList::iterator end = arl.end();
2457 for (int clientNumber = 0;
2458 iter != end, clientNumber < 256;
2459 ++iter, ++clientNumber)
2461 clients[clientNumber] = *iter;
2464 LOG_DEBUG("GenericCommunicator", "Sending " << clientCount << " notification(s): surface " << surface->getID() << " was updated.");
2466 if (!m_ipcModule.sendToClients(notification, clients, clientCount))
2468 LOG_ERROR("GenericCommunicator", "Sending notification to clients failed.")
2471 m_ipcModule.destroyMessage(notification);
2477 LOG_INFO("GenericCommunicator", "Unknown notification found in queue.");
2482 HealthCondition GenericCommunicator::pluginGetHealth()
2484 HealthCondition health = PluginBase::pluginGetHealth();
2485 if (0 != pthread_kill(mThreadId, 0))
2487 health = HealthDead;
2492 void GenericCommunicator::SetOptimizationMode(t_ilm_message message)
2494 t_ilm_message response;
2495 OptimizationType optimizationId;
2496 OptimizationModeType optimizationMode;
2498 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2499 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2501 m_ipcModule.getUint(message,&o);
2502 optimizationId = (OptimizationType) o;
2503 m_ipcModule.getUint(message,&o);
2504 optimizationMode = (OptimizationModeType) o;
2506 t_ilm_bool status = m_executor->execute(new SetOptimizationModeCommand(clientPid, optimizationId, optimizationMode));
2509 response = m_ipcModule.createResponse(message);
2513 response = m_ipcModule.createErrorResponse(message);
2514 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2516 m_ipcModule.sendToClients(response,&clientHandle,1);
2517 m_ipcModule.destroyMessage(response);
2520 void GenericCommunicator::GetOptimizationMode(t_ilm_message message)
2522 t_ilm_message response;
2523 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2524 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2525 OptimizationType optimizationId;
2526 OptimizationModeType optimizationMode;
2529 m_ipcModule.getUint(message,&o);
2530 optimizationId = (OptimizationType)o;
2532 t_ilm_bool status = m_executor->execute(new GetOptimizationModeCommand(clientPid, optimizationId, &optimizationMode));
2536 response = m_ipcModule.createResponse(message);
2537 m_ipcModule.appendUint(response,(unsigned int)optimizationMode);
2541 response = m_ipcModule.createErrorResponse(message);
2542 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2544 m_ipcModule.sendToClients(response,&clientHandle,1);
2545 m_ipcModule.destroyMessage(response);
2549 void GenericCommunicator::GetPropertiesOfScreen(t_ilm_message message)
2551 t_ilm_message response;
2552 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2554 m_ipcModule.getUint(message, &id);
2556 LmScreen* screen = m_executor->getScene()->getScreen(id);
2559 LayerList renderOrder = screen->getCurrentRenderOrder();
2560 std::vector<t_ilm_layer> layerIdVector;
2562 LayerListConstIterator iter = renderOrder.begin();
2563 LayerListConstIterator end = renderOrder.end();
2564 for (; iter != end; ++iter)
2566 layerIdVector.push_back((*iter)->getID());
2569 uint numberOfHardwareLayers = m_executor->getNumberOfHardwareLayers(id);
2570 uint* resolution = m_executor->getScreenResolution(id);
2572 response = m_ipcModule.createResponse(message);
2573 m_ipcModule.appendUintArray(response, layerIdVector.data(), layerIdVector.size());
2574 m_ipcModule.appendUint(response,numberOfHardwareLayers);
2575 m_ipcModule.appendUint(response, resolution[0]);
2576 m_ipcModule.appendUint(response, resolution[1]);
2580 response = m_ipcModule.createErrorResponse(message);
2581 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2584 m_ipcModule.sendToClients(response, &clientHandle, 1);
2585 m_ipcModule.destroyMessage(response);
2588 DECLARE_LAYERMANAGEMENT_PLUGIN(GenericCommunicator)