示例#1
0
/** 
 * @brief  从服务端接收数据
 * @param   
 * @return  -1无法接收数据 >0 接收到的数据长度
 */
int c_net_client_impl::recv_data_from_server()
{
    if(m_recv_buffer_len >= (int)sizeof(m_recv_buffer))
    {/**< 检查是否有足够的空间接收继续数据*/
        return 0;
    }    

    int bytes_recved = recv_from_server(m_sock_fd, m_recv_buffer + m_recv_buffer_len, sizeof(m_recv_buffer) - m_recv_buffer_len);
    if(bytes_recved < 0)
    {
        disconnect_from_server();
        return -1;
    }
    else if(bytes_recved == 0)
    {
        //nothing to do
    }
    else
    {
        m_recv_buffer_len += bytes_recved;
    }

    return bytes_recved;
}
示例#2
0
int play(int ac, char **av)
{
  int s;
  char buff[512];
  int size;
  int cur_energy = 50;
  char enemy_energy = 0;
  int demi_act;
  int fuite_right = 0;
  char* direc;
  char* inspect = "inspect #0x00";

  if (ac != 3)
    {
      printf("Usage: %s host port\n", av[0]);
      return (0);
    }
  s = connect_to(av[1], atoi(av[2]));

  // on attend le début de la partie
  while (1)
    {
      if ((size = recv(s, buff, 512, 0)) < 0)
	die("recv");
      if (!strcmp(buff,"go"))
	break;
    }

  while (1)
    {
      cur_energy -= 2;
      demi_act = 2;

      send_to_server(s, "watch", 5);
      recv_from_server(s, WATCH);
      printf("%s %s %s %s\n", vision[0], vision[1], vision[2], vision[3]);

      // face à de l'énergie
      if (!strcmp(vision[0], "energy"))
	{
	  send_to_server(s, "gather", 5);
	  recv_from_server(s, OK);
	  demi_act = 0;
	}

      // face à un mur
      else if (!strcmp(vision[0], ""))
	{
	  send_to_server(s, "right", 5);
	  recv_from_server(s, OK);
	  send_to_server(s, "right", 5);
	  recv_from_server(s, OK);
	  demi_act = 0;
	}

      // face à une case vide
      else if (!strcmp(vision[0], "empty"))
	{
	  if (!strcmp(vision[2], ""))
	    {
	      send_to_server(s, "rightfwd", 5);
	      recv_from_server(s, OK);
	    }
	  else if (!strcmp(vision[4], ""))
	    {
	      send_to_server(s, "leftfwd", 5);
	      recv_from_server(s, OK);
	    }
	  else
	    {
	      send_to_server(s, "forward", 5);
	      recv_from_server(s, OK);
	    }
	}

      // face à un ennemi
      else
	{
	  if (fuite_right)
	    {
	      direc = "right";
	      fuite_right = 1;
	    }
	  else
	    {
	      direc = "left";
	      fuite_right = 0;
	    }

	  //inspect
	  inspect[11] = vision[0][3];
	  inspect[12] = vision[0][4];
	  send_to_server(s, "forward", 5);
	  enemy_energy = recv_from_server(s, OK);

	  // collision
	  if (enemy_energy > cur_energy)
	    {
	      send_to_server(s, "forward", 5);
	      recv_from_server(s, OK);
	      send_to_server(s, direc, 5);
	      recv_from_server(s, OK);
	    }

	  //fuite
	  else
	    {
	      send_to_server(s, direc, 5);
	      recv_from_server(s, OK);
	      send_to_server(s, "forward", 5);
	      recv_from_server(s, OK);
	    }
	}

      // fin du cycle
      if (demi_act != 0)
	{
	  send_to_server(s, "next", 5);
	  recv_from_server(s, OK);
	}
    }
}