コード例 #1
0
void NetServer::SetCarInfo(const char *pszName)
{
	std::vector<NetDriver> vecDrivers;

	RobotXml robotxml;
	robotxml.ReadRobotDrivers(NETWORKROBOT,vecDrivers);

	for (unsigned int i=0;i<vecDrivers.size();i++)
	{
		if (vecDrivers[i].name == m_strDriverName)
		{
			strncpy(vecDrivers[i].car,pszName,64);
			UpdateDriver(vecDrivers[i]);
			break;
		}
	}
}
コード例 #2
0
ファイル: devutils.cpp プロジェクト: 210230/com0com
static int TryInstallDevice(
    const char *pInfFilePath,
    const char *pDevId,
    const char *pDevInstID,
    PCNC_DEV_CALLBACK pDevCallBack,
    void *pDevCallBackParam,
    bool updateDriver,
    BOOL *pRebootRequired)
{
  GUID classGUID;
  char className[32];

  if (!SetupDiGetINFClass(pInfFilePath, &classGUID, className, sizeof(className)/sizeof(className[0]), 0)) {
    ShowLastError(MB_OK|MB_ICONSTOP, "SetupDiGetINFClass(%s)", pInfFilePath);
    return IDCANCEL;
  }

  //Trace("className=%s\n", className);

  HDEVINFO hDevInfo;

  hDevInfo = SetupDiCreateDeviceInfoList(&classGUID, 0);

  if (hDevInfo == INVALID_HANDLE_VALUE) {
    ShowLastError(MB_OK|MB_ICONSTOP, "SetupDiCreateDeviceInfoList()");
    return IDCANCEL;
  }

  int res = IDCONTINUE;
  SP_DEVINFO_DATA devInfoData;

  devInfoData.cbSize = sizeof(devInfoData);

  if (!pDevInstID) {
    if (StrCmpNI(pDevId, "root\\", 5) == 0) {
      /*
       * root\<enumerator-specific-device-ID>
       */

      if (!SetupDiCreateDeviceInfo(hDevInfo, pDevId + 5, &classGUID, NULL, 0, DICD_GENERATE_ID, &devInfoData))
        res = IDCANCEL;
    } else {
      SetLastError(ERROR_INVALID_DEVINST_NAME);
      res = IDCANCEL;
    }
  }
  else
  if (StrChr(pDevInstID, '\\')) {
    /*
     * <enumerator>\<enumerator-specific-device-ID>\<instance-specific-ID>
     */

    if (!SetupDiCreateDeviceInfo(hDevInfo, pDevInstID, &classGUID, NULL, 0, 0, &devInfoData))
      res = IDCANCEL;

    if (res != IDCONTINUE && GetLastError() == ERROR_DEVINST_ALREADY_EXISTS) {
      char *pTmpDevInstID = NULL;

      if (SetStr(&pTmpDevInstID, pDevInstID)) {
        char *pSave;
        char *p;

        p = STRTOK_R(pTmpDevInstID, "\\", &pSave);

        if (p && !lstrcmp(p, REGSTR_KEY_ROOTENUM)) {
          p = STRTOK_R(NULL, "\\", &pSave);

          if (SetupDiCreateDeviceInfo(hDevInfo, p, &classGUID, NULL, 0, DICD_GENERATE_ID, &devInfoData))
            res = IDCONTINUE;
        }

        SetStr(&pTmpDevInstID, NULL);
      } else {
        SetLastError(ERROR_DEVINST_ALREADY_EXISTS);
      }
    }
  } else {
    /*
     * <enumerator-specific-device-ID>
     */

    if (!SetupDiCreateDeviceInfo(hDevInfo, pDevInstID, &classGUID, NULL, 0, DICD_GENERATE_ID, &devInfoData))
      res = IDCANCEL;
  }

  if (res != IDCONTINUE) {
    ShowLastError(MB_OK|MB_ICONSTOP, "SetupDiCreateDeviceInfo()");
    goto exit1;
  }

  char hardwareId[MAX_DEVICE_ID_LEN + 1 + 1];

  SNPRINTF(hardwareId, sizeof(hardwareId)/sizeof(hardwareId[0]) - 1, "%s", pDevId);

  int hardwareIdLen;

  hardwareIdLen = lstrlen(hardwareId) + 1 + 1;
  hardwareId[hardwareIdLen - 1] = 0;

  if (!SetupDiSetDeviceRegistryProperty(hDevInfo, &devInfoData, SPDRP_HARDWAREID,
                                        (LPBYTE)hardwareId, hardwareIdLen * sizeof(hardwareId[0])))
  {
    res = IDCANCEL;
    ShowLastError(MB_OK|MB_ICONSTOP, "SetupDiSetDeviceRegistryProperty()");
    goto exit1;
  }

  if (!SetupDiCallClassInstaller(DIF_REGISTERDEVICE, hDevInfo, &devInfoData)) {
    res = IDCANCEL;
    ShowLastError(MB_OK|MB_ICONSTOP, "SetupDiCallClassInstaller()");
    goto exit1;
  }

  if (pDevCallBack) {
    DevProperties devProperties;

    if (!devProperties.DevId(pDevId)) {
      res = IDCANCEL;
      goto exit2;
    }

    if (!pDevCallBack(hDevInfo, &devInfoData, &devProperties, NULL, pDevCallBackParam)) {
      res = IDCANCEL;
      goto exit2;
    }
  }

  if (updateDriver)
    res = UpdateDriver(pInfFilePath, pDevId, 0, TRUE, pRebootRequired);

exit2:

  if (res != IDCONTINUE) {
    if (!SetupDiCallClassInstaller(DIF_REMOVE, hDevInfo, &devInfoData))
      ShowLastError(MB_OK|MB_ICONWARNING, "SetupDiCallClassInstaller()");
  }

exit1:

  SetupDiDestroyDeviceInfoList(hDevInfo);

  return res;
}
コード例 #3
0
void NetServer::ReadDriverInfoPacket(ENetPacket *pPacket, ENetPeer * pPeer)
{
	NetDriver driver;

	char hostName[256];
	enet_address_get_host_ip (&driver.address,hostName,256);

    GfLogTrace ("Client Player Info connected from %s\n",hostName); 

        PackedBuffer msg(pPacket->data, pPacket->dataLength);
        GfLogTrace("ReadDriverInfoPacket: packed data length=%d\n",
                msg.length());

        try
        {
                msg.unpack_ubyte();
                driver.idx = msg.unpack_int();
                msg.unpack_string(driver.name, sizeof driver.name);
                msg.unpack_string(driver.car, sizeof driver.car);
                msg.unpack_string(driver.team, sizeof driver.team);
                msg.unpack_string(driver.author, sizeof driver.author);
                driver.racenumber = msg.unpack_int();
                msg.unpack_string(driver.skilllevel, sizeof driver.skilllevel);
                driver.red = msg.unpack_float();
                driver.green = msg.unpack_float();
                driver.blue = msg.unpack_float();
                msg.unpack_string(driver.module, sizeof driver.module);
                msg.unpack_string(driver.type, sizeof driver.type);
                driver.client = msg.unpack_int();
        }
        catch (PackedBufferException &e)
        {
                GfLogFatal("ReadDriverInfoPacket: packed buffer error\n");
        }

	GfLogTrace("ReadDriverInfoPacket: driver\n");
	GfLogTrace(".host=%d\n", driver.address.host);
	GfLogTrace(".port=%d\n", driver.address.port);
	GfLogTrace(".idx=%d\n", driver.idx);
	GfLogTrace(".name=%s\n", driver.name);
	GfLogTrace(".car=%s\n", driver.car);
	GfLogTrace(".team=%s\n", driver.team);
	GfLogTrace(".author=%s\n", driver.author);
	GfLogTrace(".racenumber=%d\n", driver.racenumber);
	GfLogTrace(".skilllevel=%s\n", driver.skilllevel);
	GfLogTrace(".red=%.1f\n", driver.red);
	GfLogTrace(".green=%.1f\n", driver.green);
	GfLogTrace(".blue=%.1f\n", driver.blue);
	GfLogTrace(".module=%s\n", driver.module);
	GfLogTrace(".type=%s\n", driver.type);
	GfLogTrace(".client=%d\n", driver.client);

	//Make sure player name is unique otherwise disconnect player
	NetServerMutexData *pSData = LockServerData();
	for(unsigned int i=0;i<pSData->m_vecNetworkPlayers.size();i++)
	{
		if (strcmp(driver.name,pSData->m_vecNetworkPlayers[i].name)==0)
		{
			SendPlayerRejectedPacket(pPeer,"Player name already used. Please choose a different name.");
			UnlockServerData();
			return;
		}
	}
	UnlockServerData();

	driver.address.host = pPeer->address.host;
	driver.hostPort = pPeer->address.port;

	SendPlayerAcceptedPacket(pPeer);
	UpdateDriver(driver);

	GfLogTrace("Reading Driver Info Packet:  Driver: %s,Car: %s\n",driver.name,driver.car);
}