Exemple #1
0
LONG CGeiOfficeCtrl::Ouvrir(void)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO : ajoutez ici le code de votre gestionnaire de dispatch

	return GEI_Open();
}
Exemple #2
0
int GEI_Open(){
  if (!opened){
    try{
#if (defined BOOST_WINDOWS) && !(defined BOOST_DISABLE_WIN32)
      // ne chercher à supprimer la mémoire partagée coté client que dans le
      // cas de Windows
      boost::interprocess::shared_memory_object::remove("GEI_SharedMemory");
#endif
      // ouverture de la mémoire partagée
      segment = new boost::interprocess::managed_shared_memory
                                   (boost::interprocess::open_only,
                                    "GEI_SharedMemory");

      // trouver les éléments dans la mémoire partagée
      shd.mutex = segment->find<Mutex>("mutex").first;
      shd.cond = segment->find<Condition>("cond").first;
      shd.update = segment->find<bool>("update").first;
      shd.units = segment->find<MapUnits>("units").first;
      shd.coalitions = segment->find<VectUnits>("coalitions").first;
      shd.pendingCommand = segment->find<Commands>("pendingCommand").first;
      shd.mapSize = segment->find<GEI_Pos>("mapSize").first;
      shd.startPosition = segment->find<GEI_Pos>("startPosition").first;
      shd.buildingLand = segment->find<VectPos>("buildingLand").first;
    } catch (...){
      std::cerr << "GEI_Open : open shared memory error" << std::endl;
      delete segment;
      segment = NULL;
#if (defined BOOST_WINDOWS) && !(defined BOOST_DISABLE_WIN32)
      // ne chercher à supprimer la mémoire partagée coté client que dans le
      // cas de Windows
      boost::interprocess::shared_memory_object::remove("GEI_SharedMemory");
#endif
      return -11;
    }
    /* indiquer que les données locales n'ont pas été renseignées */
    refreshed = false;
    ld.units = NULL;
    for (int i = 0 ; i < NB_COALITIONS ; i++)
      ld.coalitions[i] = NULL;
    ld.buildingLand = NULL;
    /* validation de l'ouverture */
    opened = true;
    return 0;
  }
  else{
    if (GEI_Close() < 0){
      std::cerr << "GEI_Open : GEI already opened, impossible to reload GEI" << std::endl;
      return -6;
    }
    // réouverture de la GEI
    return GEI_Open();
  }
}