docs/ikteam: Delete most files.
[haiku.git] / docs / develop / storage / RegistrarNotes.html
blob94d59997e61eb8d0b0facf726e4dbe6831bcacb9
1 <html>
2 <head>
3 <title>Registrar Notes</title>
4 </head>
5 <body bgcolor='#ffffff'>
6 <font face='Tahoma,Arial,SansSerif'>
8 <!-- Tasks -->
9 <hr>
10 <b>Registrar Tasks:</b>
11 <ul>
12 <li> MIME Database chores (note that BMimeType appears to read from the database directly for <code>Get*()</code> calls.)<br>
13 <ul>
14 <li> Writes to the database -- <code>SetLongDescription(), SetPreferredApp(), create_app_meta_mime(), etc</code>
15 <li> Monitoring of the database -- <code>{Start,Stop}Watching()</code> <br>
16 <li> Sniffer duties -- Sniffer code plus <code>{Get,Set,Check}SnifferRule()</code>
17 </ul>
18 <br>
20 <li> Timing chores
21 <ul>
22 <li> BMessageRunner functionality
23 </ul>
24 <li> System Shutdown chores <br>
25 <ul>
26 <li> Shutdown cycle
27 <li> System shutdown window
28 </ul>
29 <li> Roster chores
30 <ul>
31 <li> Recent documents, folders, and apps
32 <li> Info about running applications
33 <li> etc...
34 </ul>
35 </ul>
37 <!-- Internals -->
38 <hr>
39 <b>Registrar Internals:</b><br>
40 <br>
42 The registrar is a non-standard <code>BApplication</code>. It has a shadow app in the <code>app_server</code>
43 like a normal <code>BApplication</code>, but one of its ports is slightly different:
45 <ul>
46 <li> Standard ports -- snd, rcv, AppLooperPort
47 <li> Registrar ports -- snd, rcv, _roster_port_
48 </ul>
50 Since <code>BLooper::port_id</code> is private to <code>BLooper</code> (to whom <code>BApplication</code>
51 is a friend), and since you can't rename a port after it's been created,
52 it's likely that the only way to rename the <code>AppLooperPort</code> and have the registrar
53 still be a <code>BApplication</code> is to have <code>BApplication</code> check if it's the
54 registrar when it's created, and use <code>_roster_port_</code> as the name for what would
55 otherwise be its <code>AppLooperPort</code>.
56 <br>
57 <br>
58 The rationale behind having a port with a specific name is that the registrar
59 implements the roster functionality. Thus one can't address it using the app signature
60 constructor of BMessenger, but rather must send the message directly to
61 a named port (for example, upon creation, a BApplication object must find and contact
62 the registrar to notify it of another running application; if the registrar
63 cannot be found, the application putzes out).
65 <br>
66 <br>
68 The Registrar has three threads:
69 <ul>
70 <li> _roster_thread_
71 <li> timer_thread
72 <li> main_mime
73 </ul>
75 <!-- BMimeType Notes -->
76 <hr>
77 <b>BMimeType Notes:</b>
78 <ul>
79 <li> The <code>Get*()</code> methods directly access the MIME database.
80 <li> The <code>Set*()</code> methods send a message to another entity which does the job.
81 The function that does the sending is called <code>_send_to_roster_()</code>, so I
82 suppose the roster is the one. Since the registrar has a thread named
83 <code>_roster_thread_</code>, I assume the roster lives in the registrar.
84 <li> <code>Start/StopWatching()</code> call <code>BRoster::_Start/_StopWatching()</code>.
85 <li>Adding/removing a MIME type file in <code>~/config/settings/beos_mime/*/</code> does
86 not trigger a notification message. So obviously no node monitoring is
87 done and changes to the database are supposed to be done using the API.
88 </ul>
89 <!-- Links -->
90 <hr>
91 <b>Links:</b>
92 <ul>
93 <li> <a href='http://www.beatjapan.org/mirror/www.be.com/users/iconworld/icon5.html'>Icon World -- The Registrar</a>
94 <li> <a href='http://www.beosbible.com/exc_filetype.html'>The BeOS Bible -- File Typing and The Registrar</a>
95 <li> <a href='http://bang.dhs.org/be/bebook/The%20Application%20Kit/Application.html'>BApplication</a>
96 <li> <a href='http://bang.dhs.org/be/bebook/The%20Storage%20Kit/MimeType.html'>BMimeType</a>
97 <li> <a href='http://bang.dhs.org/be/bebook/Release%20Notes/StorageKit.html'>BMimeType (sniffer docs)</a>
98 <li> <a href='http://bang.dhs.org/be/bebook/The%20Application%20Kit/Roster.html'>BRoster</a>
100 </font>
101 </body>
102 </html>