xref: /haiku/src/tests/system/kernel/node_monitor_test.cpp (revision 75e7a5adaef4b6619083ec554e1fab8d0d7aeb54)
1*75e7a5adSAxel Dörfler /*
2*75e7a5adSAxel Dörfler  * Copyright 2010, Axel Dörfler, axeld@pinc-software.de.
3*75e7a5adSAxel Dörfler  * Distributed under the terms of the MIT License.
4*75e7a5adSAxel Dörfler  */
5*75e7a5adSAxel Dörfler 
6*75e7a5adSAxel Dörfler 
7*75e7a5adSAxel Dörfler #include <stdio.h>
8*75e7a5adSAxel Dörfler 
9*75e7a5adSAxel Dörfler #include <Application.h>
10*75e7a5adSAxel Dörfler #include <Entry.h>
11*75e7a5adSAxel Dörfler #include <NodeMonitor.h>
12*75e7a5adSAxel Dörfler 
13*75e7a5adSAxel Dörfler 
14*75e7a5adSAxel Dörfler class Application : public BApplication {
15*75e7a5adSAxel Dörfler public:
16*75e7a5adSAxel Dörfler 								Application();
17*75e7a5adSAxel Dörfler 	virtual						~Application();
18*75e7a5adSAxel Dörfler 
19*75e7a5adSAxel Dörfler protected:
20*75e7a5adSAxel Dörfler 	virtual	void				ArgvReceived(int32 argCount, char** args);
21*75e7a5adSAxel Dörfler 	virtual void				ReadyToRun();
22*75e7a5adSAxel Dörfler 	virtual	void				MessageReceived(BMessage* message);
23*75e7a5adSAxel Dörfler 
24*75e7a5adSAxel Dörfler private:
25*75e7a5adSAxel Dörfler 			bool				fWatchingNode;
26*75e7a5adSAxel Dörfler };
27*75e7a5adSAxel Dörfler 
28*75e7a5adSAxel Dörfler 
Application()29*75e7a5adSAxel Dörfler Application::Application()
30*75e7a5adSAxel Dörfler 	:
31*75e7a5adSAxel Dörfler 	BApplication("application/x-vnd.test-node-monitor-test"),
32*75e7a5adSAxel Dörfler 	fWatchingNode(false)
33*75e7a5adSAxel Dörfler {
34*75e7a5adSAxel Dörfler }
35*75e7a5adSAxel Dörfler 
36*75e7a5adSAxel Dörfler 
~Application()37*75e7a5adSAxel Dörfler Application::~Application()
38*75e7a5adSAxel Dörfler {
39*75e7a5adSAxel Dörfler }
40*75e7a5adSAxel Dörfler 
41*75e7a5adSAxel Dörfler 
42*75e7a5adSAxel Dörfler void
ArgvReceived(int32 argCount,char ** args)43*75e7a5adSAxel Dörfler Application::ArgvReceived(int32 argCount, char** args)
44*75e7a5adSAxel Dörfler {
45*75e7a5adSAxel Dörfler 	uint32 flags = B_WATCH_STAT;
46*75e7a5adSAxel Dörfler 
47*75e7a5adSAxel Dörfler 	for (int32 i = 0; i < argCount; i++) {
48*75e7a5adSAxel Dörfler 		BEntry entry(args[i]);
49*75e7a5adSAxel Dörfler 		if (!entry.Exists()) {
50*75e7a5adSAxel Dörfler 			fprintf(stderr, "Entry does not exist: %s\n", args[i]);
51*75e7a5adSAxel Dörfler 			continue;
52*75e7a5adSAxel Dörfler 		}
53*75e7a5adSAxel Dörfler 
54*75e7a5adSAxel Dörfler 		node_ref nodeRef;
55*75e7a5adSAxel Dörfler 		entry.GetNodeRef(&nodeRef);
56*75e7a5adSAxel Dörfler 		if (watch_node(&nodeRef, flags, this) == B_OK)
57*75e7a5adSAxel Dörfler 			fWatchingNode = true;
58*75e7a5adSAxel Dörfler 	}
59*75e7a5adSAxel Dörfler }
60*75e7a5adSAxel Dörfler 
61*75e7a5adSAxel Dörfler 
62*75e7a5adSAxel Dörfler void
ReadyToRun()63*75e7a5adSAxel Dörfler Application::ReadyToRun()
64*75e7a5adSAxel Dörfler {
65*75e7a5adSAxel Dörfler 	if (!fWatchingNode)
66*75e7a5adSAxel Dörfler 		Quit();
67*75e7a5adSAxel Dörfler }
68*75e7a5adSAxel Dörfler 
69*75e7a5adSAxel Dörfler 
70*75e7a5adSAxel Dörfler void
MessageReceived(BMessage * message)71*75e7a5adSAxel Dörfler Application::MessageReceived(BMessage* message)
72*75e7a5adSAxel Dörfler {
73*75e7a5adSAxel Dörfler 	switch (message->what) {
74*75e7a5adSAxel Dörfler 		case B_NODE_MONITOR:
75*75e7a5adSAxel Dörfler 			message->PrintToStream();
76*75e7a5adSAxel Dörfler 			break;
77*75e7a5adSAxel Dörfler 
78*75e7a5adSAxel Dörfler 		default:
79*75e7a5adSAxel Dörfler 			BApplication::MessageReceived(message);
80*75e7a5adSAxel Dörfler 	}
81*75e7a5adSAxel Dörfler }
82*75e7a5adSAxel Dörfler 
83*75e7a5adSAxel Dörfler 
84*75e7a5adSAxel Dörfler // #pragma mark -
85*75e7a5adSAxel Dörfler 
86*75e7a5adSAxel Dörfler 
87*75e7a5adSAxel Dörfler int
main(int argc,char ** argv)88*75e7a5adSAxel Dörfler main(int argc, char** argv)
89*75e7a5adSAxel Dörfler {
90*75e7a5adSAxel Dörfler 	Application app;
91*75e7a5adSAxel Dörfler 	app.Run();
92*75e7a5adSAxel Dörfler 
93*75e7a5adSAxel Dörfler 	return 0;
94*75e7a5adSAxel Dörfler }
95