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); }
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; } }
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; }
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; }
OperationResult TCPClient::Recieve(size_t size, bool confirm) { return Recieve(size, state->buff, confirm); }