dmap_spserv.cpp 4.1 KB
/*
 * Copyright 2007 Stephen Liu
 * For license terms, see the file COPYING along with this library.
 */

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <assert.h>

#include "spporting.hpp"

#include "sphttp.hpp"
#include "sphttpmsg.hpp"
#include "spserver.hpp"
#include "splfserver.hpp"
#include "dmpmainserver.h"
#include "dmpspserverrequest.h"
#include "dmpspserverresponse.h"
#include "dmpapplication.h"
#include "dmpserverconfig.h"

DmpMainServer *pDmpServer = nullptr;
class SP_HttpEchoHandler : public SP_HttpHandler
{
public:

	SP_HttpEchoHandler()
	{
		
		
		
	}
	virtual ~SP_HttpEchoHandler()
	{
		// if( pDmpServer != nullptr)
		// {
		// 	delete pDmpServer;
		// 	pDmpServer = nullptr;
		// }
	}

	virtual void handle(SP_HttpRequest *request, SP_HttpResponse *response)
	{
		char *szRequest = (char *)(request->getURL());
		if (strcmp("/favicon.ico", szRequest) == 0)
		{
			return;
		}
        
		
		DmpSpServerRequest dmpRequest(request);
		DmpSpServerResponse dmpResponse(response);
		pDmpServer->HandleRequest(dmpRequest, dmpResponse);

		// response->setStatusCode( 200 );
		// response->appendContent( "<html><head>"
		// 	"<title>Welcome to simple http</title>"
		// 	"</head><body>" );

		// char buffer[ 512 ] = { 0 };
		// snprintf( buffer, sizeof( buffer ),
		// 	"<p>The requested URI is : %s.</p>", request->getURI() );
		// response->appendContent( buffer );

		// snprintf( buffer, sizeof( buffer ),
		// 	"<p>Client IP is : %s.</p>", request->getClientIP() );
		// response->appendContent( buffer );

		// int i = 0;

		// for( i = 0; i < request->getParamCount(); i++ ) {
		// 	snprintf( buffer, sizeof( buffer ),
		// 		"<p>Param - %s = %s<p>", request->getParamName( i ), request->getParamValue( i ) );
		// 	response->appendContent( buffer );
		// }

		// for( i = 0; i < request->getHeaderCount(); i++ ) {
		// 	snprintf( buffer, sizeof( buffer ),
		// 		"<p>Header - %s: %s<p>", request->getHeaderName( i ), request->getHeaderValue( i ) );
		// 	response->appendContent( buffer );
		// }

		// if( NULL != request->getContent() ) {
		// 	response->appendContent( "<p>" );
		// 	response->appendContent( request->getContent(), request->getContentLength() );
		// 	response->appendContent( "</p>" );
		// }

		// response->appendContent( "</body></html>\n" );
	}  
};

class SP_HttpEchoHandlerFactory : public SP_HttpHandlerFactory
{
public:
	SP_HttpEchoHandlerFactory() {}
	virtual ~SP_HttpEchoHandlerFactory() {}

	virtual SP_HttpHandler *create() const
	{
		return new SP_HttpEchoHandler();
	}
};


int main(int argc, char *argv[])
{
	int port = 8088, maxThreads = 10;
	const char *serverType = "lf";
#ifndef WIN32
	extern char *optarg;
	int c;
    DmpApplication::Instance()->initialize();
	pDmpServer = new DmpMainServer();
	// std::string conn = DmpServerConfig::Instance()->getPqsqlConnect();
	// std::string email = DmpServerConfig::Instance()->getValue("MetaData","email");
	while ((c = getopt(argc, argv, "p:t:s:v")) != EOF)
	{
		switch (c)
		{
		case 'p':
			port = atoi(optarg);
			break;
		case 't':
			maxThreads = atoi(optarg);
			break;
		case 's':
			serverType = optarg;
			break;
		case '?':
		case 'v':
			printf("Usage: %s [-p <port>] [-t <threads>] [-s <hahs|lf>]\n", argv[0]);
			exit(0);
		}
	}
#endif

	sp_openlog("dmap_spserv", LOG_CONS | LOG_PID | LOG_PERROR, LOG_USER);

	assert(0 == sp_initsock());

	if (0 == strcasecmp(serverType, "hahs"))
	{
		SP_Server server("", port, new SP_HttpHandlerAdapterFactory(new SP_HttpEchoHandlerFactory()));

		server.setTimeout(60);
		server.setMaxThreads(maxThreads);
		server.setReqQueueSize(100, "HTTP/1.1 500 Sorry, server is busy now!\r\n");

		server.runForever();
	}
	else
	{
		SP_LFServer server("", port, new SP_HttpHandlerAdapterFactory(new SP_HttpEchoHandlerFactory()));

		server.setTimeout(60);
		server.setMaxThreads(maxThreads);
		server.setReqQueueSize(100, "HTTP/1.1 500 Sorry, server is busy now!\r\n");

		server.runForever();
	}
    delete pDmpServer;
	sp_closelog();
	

	return 0;
}