⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 processrequest.cpp

📁 SSD6卡耐基梅陇大学联系3答案 绝对正确 SSD6数据结构 是一门很重要的课程 希望对大家有帮助
💻 CPP
字号:
#pragma warning(disable:4786)

#include <sstream>
#include <set>
#include <string>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <fcntl.h>
#include <errno.h>

#include "processrequest.h"
#include "main.h"
#include "Advertisement.h"
#include "Listing.h"
#include "Client.h"
#include "Categories.h"

using namespace std;

void displayListing(int connfd, int port, 
					Listing::iterator begin, Listing::iterator end) {

	ostringstream oss ("");
    buildpage (oss, port, begin, end);
    send (connfd, oss.str().c_str(), strlen (oss.str().c_str()), 0);
}




void processrequest(istringstream &iss, int connfd, int port) {

  char request[80];
  memset (request, 0, 80);
  iss.getline (request, 80);
  string req(request); 
  
  // instead of the above, we could have
  // just as easily done
  // getline(iss, req)
  // but there is a bug in MSVC++ getline, so
  // using the C-style string here is more portable
  
  if (req == "LOGIN") {

    string email;
    string passwd;

    iss >> email;
    iss >> passwd;

    /*
     * Find the client's record in the set
     */
    Client* search_results = users[email];
   
    if (search_results != NULL) {
		
		if (search_results->verifyPasswd(passwd)) {
			active_user = email;
			login_failed = false;
		}
		else {
			login_failed = true;
		}
    }
    else {
		login_failed = true;
    }

    displayListing(connfd, port, advertisements.begin(), advertisements.end());
  }

  else if (req == "LOGOUT") {
    active_user = "";
    displayListing(connfd, port, advertisements.begin(), advertisements.end());
  }

  else if (req == "CREATE") {

	string verify;
	Client client;
	iss >> client;
	iss >> verify;

    /*
     * Check for existing user
     */
    Client* search_results = users[client.getEmail()];

    if ( (client.verifyPasswd (verify)) && (search_results == NULL) ){

	  active_user = client.getEmail();
      Client* new_client = new Client(client);
	  
	  users.add (new_client);
	  create_verified = true;
    }
    else {
      create_verified = false;
	}
    
    displayListing(connfd, port, advertisements.begin(), advertisements.end());
  }

  else if (req == "ADD") {

	int category;
	iss.getline(request, 80);
	category = atoi(request);

	Advertisement ad;
	iss >> ad;
	ad.setNumber(advertisement_counter);
	advertisement_counter++;

	advertisements.add(new Advertisement(ad));
	
	Category* cat = categories[category];
	cat->addItem(ad.getNumber());

	displayListing(connfd, port, advertisements.begin(), advertisements.end());
  }

   else if (req == "CATEGORY_ADD") {

	Category cat;
	iss >> cat;

	Category* p = categories[cat.getParent()];
	cat.setName(p->getName() + " / " + cat.getName());
	cat.setNumber(category_counter);
	category_counter++;	

	Category* c = new Category(cat);
	categories.add(c);
	p->addSubCategory(c);

	displayListing(connfd, port, advertisements.begin(), advertisements.end());
  }

  else if (req == "TOP_ONLY") {
    	
	int category;
	iss.getline(request, 80);
	category = atoi(request);

	Listing filteredByCategory;
	Category* c = categories[category];
	
	c->findOfferings (advertisements.begin(), advertisements.end(), 
                      filteredByCategory );
	displayListing(connfd, port, filteredByCategory.begin(), filteredByCategory.end());
	
  }
  else if (req == "RECURSIVE") {
    	
	int category;
	iss.getline(request, 80);
	category = atoi(request);


	Listing filteredByCategory;
	Category* c = categories[category];
 	
	c->findOfferingsRecursive (advertisements.begin(),
						advertisements.end(), filteredByCategory );
	displayListing(connfd, port, filteredByCategory.begin(), filteredByCategory.end());
	
  }

  else if (req == "" || req == "LIST") {
	displayListing(connfd, port, advertisements.begin(), advertisements.end());
  }

  else {
	// unknown command! Let's just list to play it safe...
	displayListing(connfd, port, advertisements.begin(), advertisements.end());
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -