1//------------------------------------------------------------------------------
2//	main.cpp
3//
4//------------------------------------------------------------------------------
5
6// Standard Includes -----------------------------------------------------------
7#include <stdio.h>
8
9// System Includes -------------------------------------------------------------
10#include <Application.h>
11#include <Looper.h>
12#include <Message.h>
13#include <OS.h>
14
15// Project Includes ------------------------------------------------------------
16
17// Local Includes --------------------------------------------------------------
18
19// Local Defines ---------------------------------------------------------------
20#ifdef USE_BAPP
21	#define DO_EXIT	be_app_messenger.SendMessage(B_QUIT_REQUESTED)
22#else
23	#define DO_EXIT release_sem(gThreadLock)
24#endif
25
26// Globals ---------------------------------------------------------------------
27#ifndef USE_BAPP
28sem_id gThreadLock = create_sem(0, "gThreadLock");
29#endif
30
31class TLooper1 : public BLooper
32{
33	public:
34		TLooper1() : BLooper() {;}
35		void MessageReceived(BMessage* msg)
36		{
37			switch (msg->what)
38			{
39				case '2345':
40					printf("Got message '2345' in %s\n", __PRETTY_FUNCTION__);
41					DO_EXIT;
42					break;
43				default:
44					BLooper::MessageReceived(msg);
45			}
46		}
47};
48
49class TLooper2 : public BLooper
50{
51	public:
52		TLooper2(BMessenger target) : BLooper(), fTarget(target) {;}
53		void MessageReceived(BMessage* msg)
54		{
55			switch (msg->what)
56			{
57				case '1234':
58					printf("Got message '1234' in %s\n", __PRETTY_FUNCTION__);
59					fTarget.SendMessage('2345');
60					break;
61				default:
62					BLooper::MessageReceived(msg);
63					break;
64			}
65		}
66
67	private:
68		BMessenger fTarget;
69};
70
71int main()
72{
73	BLooper*	fLooper1 = new TLooper1;
74	BLooper*	fLooper2 = new TLooper2(fLooper1);
75	fLooper1->Run();
76	fLooper2->Run();
77	printf("Sending message '1234' in %s\n", __PRETTY_FUNCTION__);
78	BMessenger(fLooper2).SendMessage('1234');
79
80	// Wait for loopers to finish
81	acquire_sem(gThreadLock);
82
83	return 0;
84}
85
86#if 0
87class TestApp : public BApplication
88{
89	public:
90		TestApp() : BApplication("application/x-vnd.FirstMessageTestApp")
91		{
92			fLooper1 = new TLooper1;
93			fLooper2 = new TLooper2(fLooper1);
94			fLooper1->Run();
95			fLooper2->Run();
96		}
97		void ReadyToRun()
98		{
99			printf("Sending message '1234' in %s\n", __PRETTY_FUNCTION__);
100			BMessenger(fLooper2).SendMessage('1234');
101		}
102
103	private:
104		BLooper*	fLooper1;
105		BLooper*	fLooper2;
106};
107
108int main()
109{
110	new TestApp;
111	be_app->Run();
112	delete be_app;
113	return 0;
114}
115#endif
116
117/*
118 * $Log $
119 *
120 * $Id  $
121 *
122 */
123
124