Example #1
0
void ServerCF::RecieveFromClient()
{
	int numbytes = 0;
	char *msg = new char[500];
	
	//Recv & print Data
	WSAAsyncSelect(ToClientSocket,g_pWindow,0,0);

	recv(ToClientSocket,msg,498,MSG_PEEK);
	numbytes = FindSign(msg,10);

	WSAAsyncSelect(ToClientSocket,g_pWindow,WM_SOCKET,(FD_CLOSE|FD_READ));

	if(numbytes == -1) {
		numbytes = 498;
	}
	numbytes++;
	recv(ToClientSocket,msg,numbytes,0);
//	numbytes++;
	msg[numbytes]='\0';
	//std::cout << msg << std::endl;

	if(numbytes > 0) {
		g_pMainWindow->SendMessage(msg);
	}
	delete msg;
}
Example #2
0
//---------------------------------------------------------------------------
//void __fastcall TSignRules::AddNewSigns(TDtaSource *data,TDictSource *dict)
//{
//Data=data;
//Dict=dict;
//}
//---------------------------------------------------------------------------
//пытаемся автоматически расставить знаки
void __fastcall TSignRules::AutoCheck(TDtaSource *data,TDictSource *dict){
  Data = data;
  Dict = dict;

  TRoadSign *tmpSign;//для проверки существования знака

  for (int i=0;i<data->Objects->Count;i++){

    //примыкания ->>
    TRoadAttach *attach = dynamic_cast<TRoadAttach*>(Data->Objects->Items[i]);
    if (attach){//если это примыкание
      if(!IsInTownDescreet(attach)){//если не в населённом пункте
        switch(attach->Placement){//проверяем тип примыкания
          case apRight://примыкание справа
            if(CurrentRoadIsMain(attach)){
              //добавляем три знака
              tmpSign = FindSign("2.3.2", attach->L - 30000, attach->L);
              if(!tmpSign){
                Data->AddPrjSign(Dict, roDirect, spRight, attach->L - 15500, 200, "2.3.2", "", "Примыкание справа",false);
              }
              tmpSign = FindSign("2.3.3", attach->L, attach->L + 30000);
              if(!tmpSign){
                Data->AddPrjSign(Dict, roUnDirect, spRight, attach->L + 15500, 200, "2.3.3", "", "Примыкание слева",false);
              }
              tmpSign = FindSign("2.4", attach->L - 500, attach->L + 500);
              if(!tmpSign){
                Data->AddPrjSign(Dict, roDirect, spRight, attach->L, 2000, "2.4", "", "Уступи дорогу",true);
              }
            }else{
              //если текущая дорога не главная
            }
          break;
          case apLeft://примыкание слева
            if(CurrentRoadIsMain(attach)){
              //добавляем три знака
              tmpSign = FindSign("2.3.3", attach->L - 30000, attach->L);
              if(!tmpSign){
                Data->AddPrjSign(Dict, roDirect, spRight, attach->L - 15500, 200, "2.3.3", "", "Примыкание слева",false);
              }
              tmpSign = FindSign("2.3.2", attach->L, attach->L + 30000);
              if(!tmpSign){
                Data->AddPrjSign(Dict, roUnDirect, spRight, attach->L + 15500, 200, "2.3.2", "", "Примыкание справа",false);
              }
              tmpSign = FindSign("2.4", attach->L - 500, attach->L + 500);
              if(!tmpSign){
                Data->AddPrjSign(Dict, roUnDirect, spRight, attach->L, 2000, "2.4", "", "Уступи дорогу",true);
              }
            }else{
              //если текущая дорога не главная
            }
          break;
          case apCross://пересечение
            if(CurrentRoadIsMain(attach)){
              //добавляем четыре знака
              tmpSign = FindSign("2.3.1", attach->L - 30000, attach->L);
              if(!tmpSign){
                Data->AddPrjSign(Dict, roDirect, spRight, attach->L - 15500, 200, "2.3.1", "", "Пересечение со второстепенной дорогой",false);
              }
              tmpSign = FindSign("2.3.1", attach->L, attach->L + 30000);
              if(!tmpSign){
                Data->AddPrjSign(Dict, roUnDirect, spRight, attach->L + 15500, 200, "2.3.1", "", "Пересечение со второстепенной дорогой",false);
              }
              tmpSign = FindSign("2.4", attach->L - 500, attach->L + 500);
              if(!tmpSign){
                Data->AddPrjSign(Dict, roDirect, spRight, attach->L, 2000, "2.4", "", "Уступи дорогу",true);
              }
              tmpSign = FindSign("2.4", attach->L - 500, attach->L + 500);
              if(!tmpSign){
                Data->AddPrjSign(Dict, roUnDirect, spRight, attach->L, 2000, "2.4", "", "Уступи дорогу",true);
              }
            }else{
              //если текущая дорога не главная
            }
          break;
        }
      }
    }
    //примыкания <<-
    /*
    //НП ->>
    TTown *town = dynamic_cast<TTown*>(Data->Objects->Items[i]);
    if (town){//если это мост
      tmpSign = FindSign("5.22", town->LMin - 200 , town->LMin + 200);
      if(!tmpSign){
        tmpSign = FindSign("5.24", town->LMin - 200 , town->LMin + 200);
        if(!tmpSign){
          Data->AddPrjSign(Dict, roDirect, spRight, town->LMin, 200, "2.22", "", "Начало НП");
        }
      }
      tmpSign = FindSign("5.23", town->LMin - 200 , town->LMin + 200);
      if(!tmpSign){
        tmpSign = FindSign("5.25", town->LMin - 200 , town->LMin + 200);
        if(!tmpSign){
          Data->AddPrjSign(Dict, roUnDirect, spLeft, town->LMin, 200, "2.24", "", "Конец НП");
        }
      }

      tmpSign = FindSign("5.23", town->LMax - 200 , town->LMax + 200);
      if(!tmpSign){
        tmpSign = FindSign("5.25", town->LMax - 200 , town->LMax + 200);
        if(!tmpSign){
          Data->AddPrjSign(Dict, roUnDirect, spLeft, town->LMax, 200, "2.24", "", "Конец НП");
        }
      }

      tmpSign = FindSign("5.22", town->LMax - 200 , town->LMax + 200);
      if(!tmpSign){
        tmpSign = FindSign("5.24", town->LMax - 200 , town->LMax + 200);
        if(!tmpSign){
          Data->AddPrjSign(Dict, roDirect, spRight, town->LMax, 200, "2.22", "", "Начало НП");
        }
      }
    }*/
    //НП <<-

    /*
    //мосты ->>
    TRoadBridge *bridge = dynamic_cast<TRoadBridge*>(Data->Objects->Items[i]);
    if (bridge){//если это мост
      //ставим знак сужения дороги, если он нужен

      //ставим знак "Ограничение массы", если нужно

      //ставим знак 5.26 "Наименование объекта", если нужно
    }
    //мосты <<-
    */

    //автобусная остановка ->>
    TBusStop *busStop = dynamic_cast<TBusStop*>(Data->Objects->Items[i]);
    if (busStop){//если это автобусная остановка
      //ставим знаки автобусной остановки 5.12
      tmpSign = FindSign("5.12", busStop->L - 200, busStop->L + 200);
      if(!tmpSign){
        Data->AddPrjSign(Dict, roDirect, spRight, busStop->L, 200, "5.12", "", "Автобусная остановка.",false);
      }
    }
    //автобусная остановка <<-
    /*
    //переезд ->>
    /**TRailCross *railCross = dynamic_cast<TRailCross*>(Data->Objects->Items[i]);
    if (railCross){//если это переезд
      //определяем его направление (прямое/обратное)
      //ставим знаки
      //проверяем, есть шлагбаум или нет
      //...
      tmpSign = FindSign("5.12", railCross->L - 200, railCross->L + 200);
      if(!tmpSign){

      }

    }*/
    //переезд <<-

  }
Data->AddFromBufer();
}
	// Deadzone due to bad controllers
	float ApplyDZ(float axis, float deadzone)
	{
		return fabs(axis) < deadzone ? 0 : (fabs(axis) - deadzone) / (1	- deadzone) * FindSign(axis);
	}