1ff89d51eSStephan Aßmus 2ff89d51eSStephan Aßmus #include <stdio.h> 3ff89d51eSStephan Aßmus 4ff89d51eSStephan Aßmus #include <Message.h> 5ff89d51eSStephan Aßmus #include <MessageQueue.h> 6ff89d51eSStephan Aßmus #include <String.h> 7ff89d51eSStephan Aßmus 8ff89d51eSStephan Aßmus #include "WindowLayer.h" 9ff89d51eSStephan Aßmus 10ff89d51eSStephan Aßmus #include "ClientLooper.h" 11ff89d51eSStephan Aßmus 12ff89d51eSStephan Aßmus #define SLOW_DRAWING 0 13ff89d51eSStephan Aßmus 14ff89d51eSStephan Aßmus // constructor 15ff89d51eSStephan Aßmus ClientLooper::ClientLooper(const char* name, WindowLayer* serverWindow) 16*4dd89c69SStephan Aßmus : BLooper("", B_DISPLAY_PRIORITY), 17ff89d51eSStephan Aßmus fServerWindow(serverWindow), 18ff89d51eSStephan Aßmus fViewCount(0) 19ff89d51eSStephan Aßmus { 20ff89d51eSStephan Aßmus BString clientName(name); 21ff89d51eSStephan Aßmus clientName << " client"; 22ff89d51eSStephan Aßmus SetName(clientName.String()); 23ff89d51eSStephan Aßmus } 24ff89d51eSStephan Aßmus 25ff89d51eSStephan Aßmus // destructor 26ff89d51eSStephan Aßmus ClientLooper::~ClientLooper() 27ff89d51eSStephan Aßmus { 28ff89d51eSStephan Aßmus } 29ff89d51eSStephan Aßmus 30ff89d51eSStephan Aßmus // MessageReceived 31ff89d51eSStephan Aßmus void 32ff89d51eSStephan Aßmus ClientLooper::MessageReceived(BMessage* message) 33ff89d51eSStephan Aßmus { 34ff89d51eSStephan Aßmus switch (message->what) { 35ff89d51eSStephan Aßmus case MSG_UPDATE: 36ff89d51eSStephan Aßmus 37ff89d51eSStephan Aßmus fServerWindow->PostMessage(MSG_BEGIN_UPDATE); 38ff89d51eSStephan Aßmus 39ff89d51eSStephan Aßmus for (int32 i = 0; i < fViewCount; i++) { 40ff89d51eSStephan Aßmus // the client is slow 41f5552ed0SStephan Aßmus // snooze(40000L); 42ff89d51eSStephan Aßmus // send the command to redraw a view 43ff89d51eSStephan Aßmus BMessage command(MSG_DRAWING_COMMAND); 44ff89d51eSStephan Aßmus command.AddInt32("token", i); 45ff89d51eSStephan Aßmus fServerWindow->PostMessage(&command); 46ff89d51eSStephan Aßmus } 47ff89d51eSStephan Aßmus 48ff89d51eSStephan Aßmus fServerWindow->PostMessage(MSG_END_UPDATE); 49ff89d51eSStephan Aßmus 50ff89d51eSStephan Aßmus break; 51ff89d51eSStephan Aßmus case MSG_VIEWS_ADDED: { 52ff89d51eSStephan Aßmus int32 count; 53ff89d51eSStephan Aßmus if (message->FindInt32("count", &count) >= B_OK) { 54ff89d51eSStephan Aßmus fViewCount += count; 55ff89d51eSStephan Aßmus } 56ff89d51eSStephan Aßmus break; 57ff89d51eSStephan Aßmus } 58ff89d51eSStephan Aßmus case MSG_VIEWS_REMOVED: { 59ff89d51eSStephan Aßmus int32 count; 60ff89d51eSStephan Aßmus if (message->FindInt32("count", &count) >= B_OK) 61ff89d51eSStephan Aßmus fViewCount -= count; 62ff89d51eSStephan Aßmus break; 63ff89d51eSStephan Aßmus } 64ff89d51eSStephan Aßmus default: 65ff89d51eSStephan Aßmus BLooper::MessageReceived(message); 66ff89d51eSStephan Aßmus break; 67ff89d51eSStephan Aßmus } 68ff89d51eSStephan Aßmus } 69