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