Added startup code to talk to app_server
We can now run simple applications with app_server!! git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2900 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -57,6 +57,10 @@
|
|||||||
|
|
||||||
// Local Defines ---------------------------------------------------------------
|
// Local Defines ---------------------------------------------------------------
|
||||||
|
|
||||||
|
// Uncomment this to run without the registrar - used only for app_server development!
|
||||||
|
//#define RUN_WITHOUT_REGISTRAR
|
||||||
|
|
||||||
|
|
||||||
// Globals ---------------------------------------------------------------------
|
// Globals ---------------------------------------------------------------------
|
||||||
BApplication* be_app = NULL;
|
BApplication* be_app = NULL;
|
||||||
BMessenger be_app_messenger;
|
BMessenger be_app_messenger;
|
||||||
@@ -658,12 +662,14 @@ void BApplication::InitData(const char* signature, status_t* error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifndef RUN_WITHOUT_REGISTRAR
|
||||||
// check whether be_roster is valid
|
// check whether be_roster is valid
|
||||||
if (fInitError == B_OK && !isRegistrar
|
if (fInitError == B_OK && !isRegistrar
|
||||||
&& !BRoster::Private().IsMessengerValid(false)) {
|
&& !BRoster::Private().IsMessengerValid(false)) {
|
||||||
printf("FATAL: be_roster is not valid. Is the registrar running?\n");
|
printf("FATAL: be_roster is not valid. Is the registrar running?\n");
|
||||||
fInitError = B_NO_INIT;
|
fInitError = B_NO_INIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check whether or not we are pre-registered
|
// check whether or not we are pre-registered
|
||||||
bool preRegistered = false;
|
bool preRegistered = false;
|
||||||
app_info appInfo;
|
app_info appInfo;
|
||||||
@@ -732,6 +738,43 @@ void BApplication::InitData(const char* signature, status_t* error)
|
|||||||
fInitError = B_ERROR;
|
fInitError = B_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif // ifdef RUN_WITHOUT_REGISTRAR
|
||||||
|
|
||||||
|
// Notify app_server that we exist
|
||||||
|
fServerFrom=find_port(SERVER_PORT_NAME);
|
||||||
|
if(fServerFrom!=B_NAME_NOT_FOUND)
|
||||||
|
{
|
||||||
|
// Create the port so that the app_server knows where to send messages
|
||||||
|
fServerTo=create_port(100,"a<fServerTo");
|
||||||
|
if(fServerTo!=B_BAD_VALUE || fServerTo!=B_NO_MORE_PORTS)
|
||||||
|
{
|
||||||
|
// AS_CREATE_APP:
|
||||||
|
|
||||||
|
// Attach data:
|
||||||
|
// 1) port_id - receiver port of a regular app
|
||||||
|
// 2) char * - signature of the regular app
|
||||||
|
PortLink::ReplyData replydata;
|
||||||
|
|
||||||
|
PortLink *link=new PortLink(fServerFrom);
|
||||||
|
link->SetOpCode(AS_CREATE_APP);
|
||||||
|
link->Attach((int32)fServerTo);
|
||||||
|
link->Attach((char*)signature,strlen(signature));
|
||||||
|
status_t replyerr=link->FlushWithReply(&replydata);
|
||||||
|
if(replyerr==B_OK)
|
||||||
|
{
|
||||||
|
// Reply code: AS_CREATE_APP
|
||||||
|
// Reply data:
|
||||||
|
// 1) port_id server-side application port (fServerFrom value)
|
||||||
|
fServerFrom=*((port_id*)replydata.buffer);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fInitError=replyerr;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fInitError=fServerTo;
|
||||||
|
}
|
||||||
|
|
||||||
// init be_app and be_app_messenger
|
// init be_app and be_app_messenger
|
||||||
if (fInitError == B_OK) {
|
if (fInitError == B_OK) {
|
||||||
be_app = this;
|
be_app = this;
|
||||||
|
|||||||
Reference in New Issue
Block a user