Ejemplo n.º 1
0
Points KMeansClient::DoKMeansWork(const std::string& data_message,
                                  const size_t K,
                                  const size_t dimensions) const {
  Send(data_message);
  std::stringstream centroids_message_stream(Recieve());
  return ExtractPointsFromMessage(centroids_message_stream, K, dimensions);
}
Ejemplo n.º 2
0
void KMeansSlaveClient::KMeansJob(const Points& portion_of_data, const size_t K) const {
  const size_t portion_size = portion_of_data.size();
  const size_t dimensions = portion_of_data[0].size();
  std::vector<size_t> clusters(portion_size);
  while (true) {
    std::string centroids_message = Recieve();
//    std::cout << "recv centroids ok" << std::endl;

    std::stringstream stream_with_centroids(centroids_message);
    Points centroids = ExtractPointsFromMessage(stream_with_centroids, K, dimensions);

    Points new_centroids(K, Point(dimensions));
//    std::cout << "      a" << centroids.size() << " " << centroids[0][2] << std::endl;
    std::vector<size_t> clusters_sizes(K);
    bool converged = JobItself(portion_of_data, centroids, clusters, new_centroids, clusters_sizes);

    std::stringstream converging_info_message_stream;
    converging_info_message_stream << converged << kComponentsDelimiter;
    Send(converging_info_message_stream.str());
//    std::cout <<"send conv ok"<<std::endl;

    std::string ok_or_bye_message = Recieve();
//    std::cout << "recv okbye ok: " << ok_or_bye_message << std::endl;
    if (ok_or_bye_message == "BYE") {
      break;
    }

//    std::cout <<"                b"<<new_centroids[0][0]<<std::endl;
    std::stringstream new_centroids_and_clusters_subsizes_message;
    new_centroids_and_clusters_subsizes_message.precision(20);
    InsertPointsToMessage(new_centroids_and_clusters_subsizes_message, new_centroids.cbegin(),
                          new_centroids.cend());
    for (const auto& cluster_size : clusters_sizes) {
      new_centroids_and_clusters_subsizes_message << cluster_size << kComponentsDelimiter;
    }
    Send(new_centroids_and_clusters_subsizes_message.str());
//    std::cout << "send new centroids ok" << std::endl;
  }
}
Ejemplo n.º 3
0
int main(int argc, char const *argv[])
{
	FILE *fp=fopen("dummy.txt","r");
	fd=fileno(fp);

	strcpy(sp,argv[1]);
	int usfd=Connect();
	
	int x;
	printf("Enter number of characters to scan\n");
	char buffer[512];
	while(1){
		scanf("%d",&x);
		int l=read(fd,buffer,x);
		write(1,buffer,l);
		int snd=Send(usfd,fd);
		assert(snd>0);
		Recieve(usfd);
	}
	return 0;
}
Ejemplo n.º 4
0
bool KMeansSlaveClient::Run() const {
  // GETTING INITIAL DATA
  std::string initial_data_message = Recieve();
  if (initial_data_message == "CLOSE") {
    return false;
  }

  Points portion_of_data;
  size_t portion_size, dimensions, K;
  {
    std::stringstream stream(std::move(initial_data_message));
    char ch;
    stream >> portion_size >> ch >> dimensions >> ch >> K >> ch;
    portion_of_data = ExtractPointsFromMessage(stream, portion_size, dimensions);
  }
  std::string ok_message("OK");
  Send(ok_message);

  // WORKING LOOP
//  std::cout <<"Send ok: ok"<<std::endl;
  KMeansJob(portion_of_data, K);

  return true;
}
Ejemplo n.º 5
0
OperationResult TCPClient::Recieve(size_t size, bool confirm)
{
    return Recieve(size, state->buff, confirm);
}