- added Kml export
- added HttpServer git-svn-id: http://moon:8086/svn/software/trunk/projects/FsTrack@124 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
#include "HttpServer.hpp"
|
||||
|
||||
|
||||
HttpServer::HttpServer(const char *pDocDir)
|
||||
: Thread("Http")
|
||||
, m_docDir(pDocDir)
|
||||
{
|
||||
startThread();
|
||||
}
|
||||
|
||||
|
||||
HttpServer::~HttpServer(void)
|
||||
{
|
||||
stopThread(10000);
|
||||
}
|
||||
|
||||
void HttpServer::addListener(IHttpListener *pListener)
|
||||
{
|
||||
m_listeners.add(pListener);
|
||||
}
|
||||
|
||||
const char* HttpServer::getDocName(char *buffer, int buflen)
|
||||
{
|
||||
static char docBuffer[1024];
|
||||
char *pDocname;
|
||||
|
||||
strcpy(docBuffer, m_docDir);
|
||||
pDocname = &docBuffer[strlen(docBuffer)];
|
||||
*pDocname = '\\';
|
||||
pDocname++;
|
||||
|
||||
int i, off;
|
||||
|
||||
if (!stricmp(buffer, "GET"))
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
off = 0;
|
||||
while(buffer[3+off] == 0x20)
|
||||
off++;
|
||||
|
||||
while(buffer[3+off] == '/')
|
||||
off++;
|
||||
|
||||
i = 0;
|
||||
while(buffer[3+off+i] != 0x20)
|
||||
{
|
||||
pDocname[i] = buffer[3+off+i];
|
||||
i++;
|
||||
}
|
||||
pDocname[i] = 0;
|
||||
|
||||
return docBuffer;
|
||||
}
|
||||
|
||||
void HttpServer::run()
|
||||
{
|
||||
char buffer[1024];
|
||||
|
||||
ScopedPointer<StreamingSocket> listenSock = new StreamingSocket();
|
||||
listenSock->bindToPort(5001);
|
||||
listenSock->createListener(5001);
|
||||
|
||||
while(!threadShouldExit())
|
||||
{
|
||||
const char *pDoc = nullptr;
|
||||
if (listenSock->waitUntilReady(true, 100) > 0)
|
||||
{
|
||||
|
||||
ScopedPointer<StreamingSocket> pSock = listenSock->waitForNextConnection();
|
||||
|
||||
int numRead = pSock->read(buffer, sizeof(buffer), false);
|
||||
if (numRead > 0)
|
||||
{
|
||||
pDoc = getDocName(buffer, numRead);
|
||||
if (!pDoc)
|
||||
{
|
||||
pSock->close();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
m_listeners.call(&IHttpListener::onUpdate, pDoc);
|
||||
|
||||
ScopedPointer<juce::File> file = new juce::File(pDoc);
|
||||
if (!file)
|
||||
continue;
|
||||
|
||||
ScopedPointer<juce::FileInputStream> pFileStream = file->createInputStream();
|
||||
if (!pFileStream)
|
||||
continue;
|
||||
|
||||
int64 remain = pFileStream->getTotalLength();
|
||||
int64 toRead;
|
||||
|
||||
while(remain)
|
||||
{
|
||||
toRead = remain;
|
||||
if (toRead > sizeof(buffer))
|
||||
{
|
||||
toRead = sizeof(buffer);
|
||||
}
|
||||
pFileStream->read(buffer, toRead);
|
||||
pSock->write(buffer, toRead);
|
||||
remain -= toRead;
|
||||
}
|
||||
pFileStream = nullptr;
|
||||
pSock = nullptr;
|
||||
file = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user