示例#1
0
int Connection::read_integer( int fd, int *data )
{
  int		ret, debug=0;

  do
    {
      ret = my_receive( fd, data, sizeof(int) );
      if( ret!=sizeof(int) )
	{
	  if(debug) tl_message ("read miss : ret = %d : data = %d [%d][%d][%d][%d]", ret, *data, data[0], data[1], data[2], data[3] );
	}
    }
  while (ret!=sizeof(int) );

  return 0;
}
示例#2
0
int udp_test(std::vector<std::string> args)
{
    size_t argc = args.size();
    for (size_t i = 0; i < argc; ++i)
    {
        if (i == 0) continue;
        std::cout << "Param[" << i << "] : " << args[i] << std::endl;
    }

    if (args.size() >= 3) {
        if (StringEqual(args[2].c_str(), "send")) {
            my_send();
        } else {
            my_receive();
        }
    }
    return 0;
}
示例#3
0
/*---------------------------------------------------------------------------*/
int Connection::Receive (int type, gpointer data)
{
  int		ret, debug=0;
  char		word[MAX_STRING];

  // if (!connection) return CONNECTION_FAIL;
  if (type & CONNECTION_SELECT)
    {
      if (Select( )==CONNECTION_FAIL)
	return CONNECTION_FAIL;
    }
      
  if( type & CONNECTION_BYTE )
    {
      // 通信できていない場合は Retry するようにする : 1999 Apr 26th
      int		fd;
      fd = FdRead( );
      do {
	ret = my_receive (fd, data, sizeof(char));
	if (ret==-1)
	  {
	    tl_warning ("%s : STRING : Error(%d)!", GetName(), errno);
	    return CONNECTION_FAIL;
	  }
      }
      while( ret!=1 );
    }
  else if( (type & CONNECTION_STRING) )
    {
      // C で文字列を受けとる時は最後の '\n' を '\0' に変換する
      int		fd, ret, p, debug=0;
      fd = FdRead( );
      for (p=0;;p++)
	{
	  do
	    {
	      ret = my_receive( fd, (gpointer)((char *)data+p), 1 );
	      if (ret==FALSE)
		tl_message ("%s : STRING : Error!", GetName());
	      if(debug) tl_message ("%c(%d)::", ((char *)data)[p], ((char *)data)[p]);
	    }
	  while( ret!=sizeof(char) );
	  if ( ((char *)data)[p]=='\n' ) break;
	  if (ret!=sizeof(char) || p>=MAX_STRING)
	    {
	      tl_message ("%s : STRING : OverFlow Error!", name );
	    }
	}
      ((char *)data)[p] = '\0';
    }
  else if( type & CONNECTION_WORD )
    {
      FILE	*fp;
      fp = FpRead();
      if( fgets( word, MAX_STRING, fp )==NULL )
	{
	  tl_message ("WORD : Error!");
	  return CONNECTION_FAIL;
	}
      sscanf (word, "%s", (char *)data);
    }
  else if (type & CONNECTION_INTEGER)
    {
      int		fd, value=0;
      fd = FdRead();
      ret = my_receive( fd, &value, sizeof(int) );
      if( ret!=sizeof(int) )
	{
	  tl_message ("INTEGER : Error!");
	  return CONNECTION_FAIL;
	}
      *( (int *)data ) = value;
    }
  else if (type & CONNECTION_DOUBLE)
    {
      int		fd;
      double		value=0.0;
      fd = FdRead ();
      ret = my_receive (fd, &value, sizeof(double));
      if (ret!=sizeof(double))
	{
	  tl_warning ("<DOUBLE> : ret = %d ", ret);
	  return FALSE;
	}
      *( (double *)data ) = value;
    }
  else if (type & CONNECTION_TLVECTOR)
    Receive_tlVector ((tlVector_t *)data);   //KEEP AN EYE OVER HERE !!!!

  else if (type & CONNECTION_STREAM )
    {
      // STREAM 型の場合,最初に int 型で長さを受けとってから,データをもらう
      int		fd, length=0, p, tmp=5;
      fd = FdRead();
      if(stream == NULL )
	{
	  tl_message ("STREAM :%s : Point is NULL!", GetName());
	  return CONNECTION_FAIL;
	}
      read_integer (fd, &tmp);
      tl_message ("Read Check 1 : length = %d", tmp);
      read_integer (fd, &length);
      tl_message ("Read Check 2 : length = %d", length);
      fsync(fd);
      if( tmp!=length )
	{
	  tl_message ("STREAM :%s : length mismatch %d!=%d", GetName(), tmp, length);
	  ret = my_receive( fd, &tmp, sizeof(int) );
	  return CONNECTION_FAIL;
	}
      tl_message ("STREAM :%s : length = %d", GetName(), length );
      *((int *)data) = length;
      if( length<=0 )
	{
	  tl_message ("STREAM :%s : length error!", GetName());
	  return CONNECTION_FAIL;
	}
      for (p=0; p<length; p++)
	{
	  ret = my_receive( fd, (stream)+p, 1 );
	  if (ret!= 1)
	    {
	      tl_warning ("STREAM :%s : read error!", GetName());
	      return CONNECTION_FAIL;
	    }
	}
      if(debug) tl_message ("STREAM :%s (2): length = %d", GetName(), length);
    }
  else
    {
      tl_message ("%s: Error! Set Send Type.(%d)", GetName(), type);
      return CONNECTION_FAIL;
    }
  return CONNECTION_SUCCESS;
}