コード例 #1
0
ファイル: GameDLL.cpp プロジェクト: master4523/crimsonglory
DLLEXPORT
bool GameDLLInit( ModuleImportExport ie, int argc, char* argv[] )
{
    // set engine singleton pointers
    CApplication::SetSingletonPtr( ( CApplication * )ie.app );
    CAppLog::SetSingletonPtr( ie.app->log );
    CNetwork::SetSingletonPtr( ie.app->network );

    CScript* script = new CScript();
    IC_MainConsole* console = new IC_MainConsole();

    //
    CONSOLE.add( "Game DLL initialized." );

    //change working directory to mod
    changeWorkingDir( APP.modDir );
    CONSOLE.addx( "Changing game working directory to '%s%s'", APP.appDir.c_str(), APP.modDir.c_str() );

    // create the Game
    new CGame();

    // create other objects
    CGameServer* serverProcess = new CGameServer();
#ifdef _CLIENT
    CGameClient* clientProcess = new CGameClient();
#endif

    // return singleton pointers
    ModuleImportExport ex;
    ex.app = CGame::GetSingletonPtr();
    ex.serverGameProcess = serverProcess;
#ifdef _CLIENT
    ex.clientGameProcess = clientProcess;
#endif
    APP.ImportDLLPointers( ex );

    // run it!
    CGame::GetSingleton().Run( argc, argv );

    // destroy created objects
    delete CGame::GetSingletonPtr();
    delete serverProcess;
#ifdef _CLIENT
    delete clientProcess;
#endif

    //change working directory to apps
    changeWorkingDir( APP.appDir );

    //clean up any remaining unreleased objects
    IMMObject::CollectRemainingObjects( ( bool )APP.DebugMode );

    delete script;
    delete console;

    return true;
}
コード例 #2
0
ファイル: main.cpp プロジェクト: master4523/crimsonglory
void CApplication::Run( int argc, char* argv[] )
{
    startupError = 0;
    buildName = ENGINE_NAME; 
    buildName += " (build: "; 
    buildName += MakeBuildNumber( __DATE__ ); 
    buildName += " version: "; 
    buildName += ENGINE_VERSION;
    buildName += ")"; 

    // get and set the working directory
    appDir = getDirectoryFromArgs( argc, argv );
    changeWorkingDir( appDir );

    //open logfiles
    log = new CAppLog( "Logs/app.txt", true );

    APPLOG.Write( wide2string( buildName ).c_str() );

    //create a couple of singletons
    network = new CNetwork();

    if ( argc > 1 )
    {
      modDir = argv[1];
    }
    else
    {
      modDir = DEFAULT_MODDIR;
    }
    modDir += "/";

    //load and run the game
    String dllFile = modDir;
    dllFile += GAME_MODULE;
    if ( !LoadGameDLL( dllFile.c_str(), argc, argv ) )
    {
      startupError = ERROR_DLL_NOTLOADED;
      APPLOG.Write( "Could not load game module %s", dllFile.c_str() );
    }
    // no script and console at this point

    for ( int i = 0; i < modules.size(); i++ )
    {
      if ( modules[i] )
      {
        FreeLibrary( ( HMODULE )modules[i] );
      }
    }

    //clean up singletons
    delete network;

    if ( startupError > 0 )
    {
      getchar();
    }
}
コード例 #3
0
ファイル: launcher.cpp プロジェクト: T-REX-XP/packr
void* launchVM(void* params) {
    std::string execDir = getExecutableDir();
    std::ifstream configFile;
    configFile.open((execDir + std::string("/config.json")).c_str());
    printf("config file: %s\n", (execDir + std::string("/config.json")).c_str());
    
    picojson::value json;
    configFile >> json;
    std::string err = picojson::get_last_error();
    if(!err.empty()) {
        printf("Couldn't parse json: %s\n", err.c_str());
    }
    
    std::string jarFile = execDir + std::string("/") + json.get<picojson::object>()["jar"].to_str();
    std::string main = json.get<picojson::object>()["mainClass"].to_str();
    std::string classPath = std::string("-Djava.class.path=") + jarFile;
    picojson::array vmArgs = json.get<picojson::object>()["vmArgs"].get<picojson::array>();
    printf("jar: %s\n", jarFile.c_str());
    printf("mainClass: %s\n", main.c_str());
    
    JavaVMOption* options = (JavaVMOption*)malloc(sizeof(JavaVMOption) * (1 + vmArgs.size()));
    options[0].optionString = (char*)classPath.c_str();
    for(unsigned i = 0; i < vmArgs.size(); i++) {
        options[i+1].optionString = (char*)vmArgs[i].to_str().c_str();
        printf("vmArg %d: %s\n", i, options[i+1].optionString);
    }
    
    JavaVMInitArgs args;
    args.version = JNI_VERSION_1_6;
    args.nOptions = 1 + (int)vmArgs.size();
    args.options = options;
    args.ignoreUnrecognized = JNI_FALSE;
    
    JavaVM* jvm = 0;
    JNIEnv* env = 0;

#ifndef WINDOWS
    #ifdef MACOSX
        std::string jre = execDir + std::string("/jre/lib/server/libjvm.dylib");
    #elif defined(__LP64__)
        std::string jre = execDir + std::string("/jre/lib/amd64/server/libjvm.so");
    #else
        std::string jre = execDir + std::string("/jre/lib/i386/server/libjvm.so");
    #endif

    printf("jre: %s\n", jre.c_str());
    
    void* handle = dlopen(jre.c_str(), RTLD_LAZY);
    if(handle == NULL) {
        fprintf(stderr, "%s\n", dlerror());
        exit(EXIT_FAILURE);
    }
    PtrCreateJavaVM ptrCreateJavaVM = (PtrCreateJavaVM)dlsym(handle, "JNI_CreateJavaVM");
    if(ptrCreateJavaVM == NULL) {
        fprintf(stderr, "%s\n", dlerror());
        exit(EXIT_FAILURE);
    }
#else
	HINSTANCE hinstLib = LoadLibrary(TEXT("jre\\bin\\server\\jvm.dll"));
	PtrCreateJavaVM ptrCreateJavaVM = (PtrCreateJavaVM)GetProcAddress(hinstLib,"JNI_CreateJavaVM");
#endif
    
    if(!changeWorkingDir(execDir)) {
        printf("Couldn't change working directory to: %s\n", execDir.c_str());
    }

    jint res = ptrCreateJavaVM(&jvm, (void**)&env, &args);
    if(res < 0) {
        fprintf(stderr, "Failed to create Java VM\n");
        exit(EXIT_FAILURE);
    }

    jobjectArray appArgs = env->NewObjectArray(g_argc, env->FindClass("java/lang/String"), NULL);
    for(int i = 0; i < g_argc; i++) {
        jstring arg = env->NewStringUTF(g_argv[i]);
        env->SetObjectArrayElement(appArgs, i, arg);
    }
    
    jclass mainClass = env->FindClass(main.c_str());
    jmethodID mainMethod = env->GetStaticMethodID(mainClass, "main", "([Ljava/lang/String;)V");
    if(mainMethod == 0) {
        fprintf(stderr, "Failed to aquire main() method of class: %s:\n", main.c_str());
        exit(EXIT_FAILURE);
    }
    env->CallStaticVoidMethod(mainClass, mainMethod, appArgs);
    jvm->DestroyJavaVM();
    return 0;
}
コード例 #4
0
ファイル: runtime.c プロジェクト: rfreim1/Simple-Linux-Shell
/*
 * RunBuiltInCmd
 *
 * arguments:
 *   commandT *cmd: the command to be run
 *
 * returns: none
 *
 * Runs a built-in command.
 */
static void
RunBuiltInCmd(commandT* cmd)
{
  if(strcmp(cmd->argv[0],"cd")==0){
    changeWorkingDir(cmd->argv[1]); 
  }
  /* "pwd" command*/ 
  else if(strcmp(cmd->argv[0],"pwd")==0){
   char *dir = getCurrentWorkingDir();
   printf("%s\n",dir);   
   free(dir);
  }
  else if(!strcmp(cmd->argv[0],"jobs")){
   bgjobL* job = bgjobs;
   while (job != NULL){
    if (!strcmp(job->status, "Running")){
      printf("[%d]   %s                 %s &\n", job->jid, job->status, job->name);
    }
    else{
      printf("[%d]   %s                 %s\n", job->jid, job->status, job->name);
    }
    job = job->next;
  }
 }
  else if (!strcmp(cmd->argv[0],"fg")){
    bgjobL* job;
    if(cmd->argv[1] != NULL){
     job = GetJobFromJid(atoi(cmd->argv[1]));
    }
    else{
      job = GetMRJob();
    }
    
    //bring bg process to foreground
    if (job != NULL){
      tcsetpgrp(job->pid, STDIN_FILENO);
      crpid = job->pid;
      crName = job->name;
      DeleteJob(job->pid);
      kill(-crpid, SIGCONT);
      int status = 0;
      waitpid(crpid, &status, WUNTRACED);
      crpid = 0;
      crName = NULL;
    }
  }
  else if (!strcmp(cmd->argv[0],"bg")){
    bgjobL* job;
    if(cmd->argv[1] != NULL){
     job = GetJobFromJid(atoi(cmd->argv[1]));
     if (job != NULL){
      kill(job->pid, SIGCONT);
      job->status = "Running";
     }
    }
    else{
      job = GetMRJob();
      if (job != NULL){
	kill(job->pid, SIGCONT);
      job->status = "Running";
      }
    }
  }
  else if(!strcmp(cmd->argv[0],"alias")){
  
      addAlias(cmd);

  }
  else if(!strcmp(cmd->argv[0],"unalias")){
  
      deleteAlias(cmd->argv[1]);

  }
   else if(!strcmp(cmd->argv[0],"exit")){
  
      return;

  }
} /* RunBuiltInCmd */