xref: /haiku/src/tests/servers/app/newerClipping/ClientLooper.cpp (revision 4dd89c69035045bb0d7aa5a604d8d37bfa2cf3f6)
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