Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void __fastcall TForm1::dataUpload2ServerServe(TCustomIpClient *ClientSocket)
- {
- NextPacketSize npk;
- TXMLDocument *xml;
- UnicodeString filename;
- String routeName;
- String uname = map.find(ClientSocket->RemoteHost)->second.username;
- int lastRouteId;
- ThreadLock->Enter();
- ClientSocket->ReceiveBuf(&npk, sizeof(NextPacketSize));
- Memo1->Lines->Add(String("Client ")+uname+String(" is trying to upload a route to the server."));
- char *buffer = (char*)malloc( sizeof(char)*(npk.size+1));
- //char *buffer = new char[npk.size+1];
- memset(buffer, NULL, (npk.size+1)*sizeof(char));
- ClientSocket->ReceiveBuf(buffer, (npk.size)*sizeof(char), MSG_WAITALL);
- std::string final_xml(buffer, npk.size);
- xml = new TXMLDocument(NULL);
- std::vector<TForm1::Pair> pair = findXMLTag(buffer, "<Image>", npk.size+1);
- for(int i = pair.size() - 1; i >= 0 ; i--)
- {
- int new_size;
- char* tmp = base64(&buffer[pair[i].start], pair[i].end - pair[i].start, &new_size);
- final_xml = binary_replace(final_xml, pair[i].start, pair[i].end, tmp);
- free(tmp);
- }
- pair = findXMLTag(const_cast<char*>(final_xml.c_str()), "<Video>", final_xml.size());
- for(int i = pair.size() - 1; i >= 0; i--)
- {
- int new_size;
- char* tmp = base64(&buffer[pair[i].start], pair[i].end - pair[i].start, &new_size);
- final_xml = binary_replace(final_xml, pair[i].start, pair[i].end, tmp);
- free(tmp);
- }
- pair = findXMLTag(const_cast<char*>(final_xml.c_str()), "<Text>", final_xml.size());
- for(int i = pair.size() - 1; i >= 0; i--)
- {
- int new_size;
- char* tmp = base64(&buffer[pair[i].start], pair[i].end - pair[i].start, &new_size);
- final_xml = binary_replace(final_xml, pair[i].start, pair[i].end, tmp);
- free(tmp);
- }
- xml->LoadFromXML(AnsiString(final_xml.c_str()));
- _di_IXMLNodeList root = xml->ChildNodes->GetNode("root")->GetChildNodes();
- filename = xml->ChildNodes->GetNode("root")->GetAttribute("filename");
- routeName = filename;
- filename = path + UnicodeString("uploadedRoutes\\") + filename;
- filename += ".xml";
- //Add the route into the database.
- try
- {
- int userId;
- String SQLQuery = "SELECT idUsers FROM users WHERE Username = :uname";
- TSQLQuery *SQL = new TSQLQuery(NULL);
- SQL->SQLConnection = SQLConnection;
- SQL->SQL->Text = SQLQuery;
- SQL->ParamByName("uname")->AsAnsiString = map.find(ClientSocket->RemoteHost)->second.username;
- SQL->Open();
- SQL->First();
- userId = SQL->FieldByName("idUsers")->AsInteger;
- SQL->Close();
- SQLQuery = "INSERT INTO routes(routeName, userID) VALUES(:rtname, :userid)";
- SQL->SQL->Text = SQLQuery;
- SQL->ParamByName("rtname")->AsAnsiString = routeName;
- SQL->ParamByName("userid")->AsInteger = userId;
- SQL->ExecSQL();
- SQLQuery = "SELECT MAX(idRoutes) as lastID FROM routes ";
- SQL->SQL->Text = SQLQuery;
- SQL->Open();
- SQL->First();
- lastRouteId = SQL->FieldByName("lastID")->AsInteger;
- SQL->Close();
- delete SQL;
- }
- catch(Exception &e)
- {
- Memo2->Lines->Add(e.ToString());
- }
- //The route has been added into the database.
- //extract the info about each point(Lon, Lat), Image, Video, Text
- //place those info in the float like class
- //And then perform a douglas-peckeur run on those points.
- //At last, reconstruct the XML file and store it, while updating the sql server.
- int child_count = root->GetCount();
- for(int i = 0; i < child_count; i++)
- {
- int point_count;
- _di_IXMLNodeList point = root->GetNode(i)->GetChildNodes();
- point_count = point->GetCount();
- _di_IXMLNode node = point->GetNode("Coords");
- String Lat, Lon, DateTime;
- Lat = node->GetChildNodes()->GetNode("Lat")->GetText();
- Lon = node->GetChildNodes()->GetNode("Lon")->GetText();
- DateTime = point->GetNode("DateTime")->GetText();
- try
- {
- String SQLQuery = "INSERT INTO waypoints(routeID, Lon, Lat, DateTime) VALUES(:rtid, :lon, :lat, :dt)";
- TSQLQuery *SQL = new TSQLQuery(NULL);
- SQL->SQLConnection = SQLConnection;
- SQL->SQL->Text = SQLQuery;
- SQL->ParamByName("rtid")->AsInteger = lastRouteId;
- SQL->ParamByName("lon")->AsAnsiString = Lon;
- SQL->ParamByName("lat")->AsAnsiString = Lat;
- SQL->ParamByName("dt")->AsAnsiString = DateTime;
- SQL->ExecSQL();
- delete SQL;
- }
- catch (Exception &e)
- {
- PageControl1->Canvas->Brush->Color = clRed;
- Memo2->Lines->Add(e.ToString());
- }
- String Data = point->GetNode("Text")->GetText();
- handleData(Data, TypeOfMedia::Text);
- Data = point->GetNode("Image")->GetText();
- handleData(Data, TypeOfMedia::Image);
- Data = point->GetNode("Video")->GetText();
- handleData(Data, TypeOfMedia::Video);
- }
- xml->SaveToFile(filename);
- xml->Active = false;
- free(buffer);
- delete xml;
- buildXML(lastRouteId);
- Memo1->Lines->Add(String("Client ")+uname+String(" has uploaded the route successfully."));
- //Finally since we got a new route we will add it to the routes xml.
- buildRouteList(lastRouteId);
- ThreadLock->Leave();
- }
Advertisement
Add Comment
Please, Sign In to add comment