亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? scripting.cpp

?? roadnav 內含一個基于wxWindows庫的車載導航系統。編譯后
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
 *  Roadnav
 *  Scripting.cpp
 *
 *  Copyright (c) 2004 - 2006 Richard L. Lynch <rllynch@users.sourceforge.net>
 *
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of version 2 of the GNU General Public License
 *  as published by the Free Software Foundation.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */
 
//////////////////////////////////////////////////////////////////////////////
/// \file
///
/// Scripting class
///
//////////////////////////////////////////////////////////////////////////////

#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#ifdef HAVE_MATH_H
#include <math.h>
#endif

#ifdef _MSC_VER
#pragma warning(disable: 4786)
#endif

#include <wx/wx.h>
#include <wx/tokenzr.h>
#include <wx/wfstream.h>
#include <wx/socket.h>
#include <wx/sckstrm.h>

#include "libroadnav/MapLookup.h"
#include "libroadnav/MapSupport.h"

#include "App.h"
#include "Scripting.h"

#ifdef USE_SCRIPTING

using namespace std;

//////////////////////////////////////////////////////////////////////////////
///
/// \brief Remove and return the front of an STL list
///
//////////////////////////////////////////////////////////////////////////////
wxString PopFrontAndReturn(list<wxString> & lList)
{
	wxString strRtn;
	
	strRtn = lList.front();
	lList.pop_front();
	return strRtn;
}

wxString GetScriptExportFilename()
{
	wxString strRtn = g_pConfig->Read(wxT("ScriptingExportScriptFilename"), wxT(""));
	
	return strRtn;
}

bool GetScriptAppendMode()
{
	return true;
}


//////////////////////////////////////////////////////////////////////////////
///
/// \brief ScriptStream constructor - initialize all member variables
///
//////////////////////////////////////////////////////////////////////////////
ScriptStream::ScriptStream(wxInputStream * pInputStream, wxOutputStream * pOutputStream, wxSocketBase * pSocket)
{
	m_pInputStream = pInputStream;
	m_pOutputStream = pOutputStream;
	m_pSocket = pSocket;
	m_tLastRead = wxDateTime::Now();
}

//////////////////////////////////////////////////////////////////////////////
///
/// \brief ScriptStream destructor - free all memory
///
//////////////////////////////////////////////////////////////////////////////
ScriptStream::~ScriptStream()
{
	if (m_pInputStream)
		delete m_pInputStream;
	m_pInputStream = NULL;
	
	if (m_pOutputStream)
		delete m_pOutputStream;
	m_pOutputStream = NULL;
	
	if (m_pSocket)
		delete m_pSocket;
	m_pSocket = NULL;
}


//////////////////////////////////////////////////////////////////////////////
///
/// \brief Scripting constructor - initialize all variables
///
//////////////////////////////////////////////////////////////////////////////
Scripting::Scripting(MapControl * pctlMap)
{
	m_pctlMap = pctlMap;
}

//////////////////////////////////////////////////////////////////////////////
///
/// \brief Destructor - free all memory
///
//////////////////////////////////////////////////////////////////////////////
Scripting::~Scripting()
{
	vector<ScriptStream *>::iterator i;
	
	// free scripts
	m_mtxScripts.Lock();
	for (i = m_vScripts.begin(); i != m_vScripts.end(); i++)
	{
		delete (*i);
	}
	m_vScripts.clear();
	m_mtxScripts.Unlock();

	// free servers
	DeleteAllTCPServers();
}

//////////////////////////////////////////////////////////////////////////////
///
/// \brief Internal function to add script to list
///
//////////////////////////////////////////////////////////////////////////////
void Scripting::AddScript(wxInputStream * pInputStream, wxOutputStream * pOutputStream, wxSocketBase * pSocket)
{
	m_mtxScripts.Lock();
	m_vScripts.push_back(new ScriptStream(pInputStream, pOutputStream, pSocket));
	m_mtxScripts.Unlock();
}

//////////////////////////////////////////////////////////////////////////////
///
/// \brief Internal function to add server to list
///
//////////////////////////////////////////////////////////////////////////////
void Scripting::AddServer(wxSocketServer * pServer)
{
	m_mtxServers.Lock();
	m_vServers.push_back(pServer);
	m_mtxServers.Unlock();
}


//////////////////////////////////////////////////////////////////////////////
///
/// \brief Processes queued up events - best if run from the main thread
/// of the application, in OnIdle or a timer.
///
//////////////////////////////////////////////////////////////////////////////
void Scripting::PumpScripts()
{
	vector<ScriptStream *>::iterator iScript;
	
	m_mtxScripts.Lock();
	
	// iterate through scripts
	for (iScript = m_vScripts.begin(); iScript != m_vScripts.end(); iScript++)
	{
		bool bStreamOkay;
		
		// decide if this script is okay, or if it should be closed
		if ((*iScript)->m_pSocket)
			bStreamOkay = (*iScript)->m_pSocket->IsConnected();
		else
			bStreamOkay = !(*iScript)->m_pInputStream->Eof();
			
		if (bStreamOkay)
		{
			int iCRLFPos;
			int iPadding;
			
			if ((*iScript)->m_pSocket)
			{
				// CanRead() doesn't seem to work correctly on wxSocketInputStream :(
				int iCount = 1;
				
				// keep reading, until there is no more data
				while (iCount)
				{
					char szBuffer[1025];
					
					// read, then NULL terminate
					(*iScript)->m_pSocket->Read(szBuffer, 1024);
					iCount = (*iScript)->m_pSocket->LastCount();
					szBuffer[iCount] = 0;
					
					if (iCount)
					{
						// got something .. append it to input buffer and update last read timestamp
						(*iScript)->m_strInputBuffer += wxString(szBuffer, *wxConvCurrent);
						(*iScript)->m_tLastRead = wxDateTime::Now();
					}
					else
					{
						// one minute of no activity? send a keepalive
						if (wxDateTime::Now() - (*iScript)->m_tLastRead > wxTimeSpan(0, 1, 0, 0))
						{
							(*iScript)->m_pSocket->Write("KEEPALIVE\r\n", 11);
							(*iScript)->m_tLastRead = wxDateTime::Now();
						}
					
						// make sure everything is okay, otherwise shut down connection
						if ((*iScript)->m_pSocket->LastError() != wxSOCKET_WOULDBLOCK && (*iScript)->m_pSocket->LastError() != wxSOCKET_NOERROR)
							bStreamOkay = false;
					}
				} // while (iCount)
			}
			else // we're not reading from a socket
			{
				// do a byte by byte read until there's no more data
				while ((*iScript)->m_pInputStream->CanRead())
					(*iScript)->m_strInputBuffer += (*iScript)->m_pInputStream->GetC();
			}
			
			iCRLFPos = 1;
			
			while (iCRLFPos >= 0)
			{
				// look for CR-LF
				iCRLFPos = (*iScript)->m_strInputBuffer.Find(wxT("\r\n"));
				iPadding = 2;
				
				// try just LF if CR-LF can't be found
				if (iCRLFPos < 0)
				{
					iCRLFPos = (*iScript)->m_strInputBuffer.Find(wxT('\n'));
					iPadding = 1;
				}
				
				// try just CR
				if (iCRLFPos < 0)
				{
					iCRLFPos = (*iScript)->m_strInputBuffer.Find(wxT('\r'));
					iPadding = 1;
				}
					
				// if EOL found
				if (iCRLFPos >= 0)
				{
					list<wxString> vRtn;
					
					// run command
					vRtn = ExecuteCommand((*iScript)->m_strInputBuffer.Left(iCRLFPos));
					
					// if output stream available
					if ((*iScript)->m_pOutputStream)
					{
						wxString strOut;
						
						strOut = CompileCommand(vRtn);
		
						// then send it if non-empty
						if (strOut.Length())
						{
							strOut += wxT("\r\n");
							(*iScript)->m_pOutputStream->Write(strOut.mb_str(*wxConvCurrent), strOut.Length());
						}
					}
					
					// remove processed command from buffer
					(*iScript)->m_strInputBuffer = (*iScript)->m_strInputBuffer.Mid(iCRLFPos + iPadding);
				}
			}
		}
		
		// something happened .. EOF or socket closed or something .. free up memory and remove from vector
		if (!bStreamOkay)
		{
			// EOF, free up memory
			delete (*iScript);
			
			// remove from vector
			m_vScripts.erase(iScript);
			
			// exit loop
			break;
		}
	}
	m_mtxScripts.Unlock();
}

//////////////////////////////////////////////////////////////////////////////
///
/// \brief Accept connections on any servers running
///
//////////////////////////////////////////////////////////////////////////////
void Scripting::PumpServers()
{
	vector<wxSocketServer *>::iterator i;

	m_mtxServers.Lock();
	for (i = m_vServers.begin(); i != m_vServers.end(); i++)
	{
		wxSocketBase * pSock;
		
		pSock = (*i)->Accept(false);
		
		if (pSock)
		{
			// got a new incoming connection

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美伊人久久久久久久久影院 | 韩国女主播成人在线| 欧美亚洲免费在线一区| 国产999精品久久久久久绿帽| 国产人成一区二区三区影院| 久久精品欧美日韩| 亚洲视频免费看| 欧美在线观看视频一区二区三区 | 国产69精品久久777的优势| 日日夜夜免费精品| 久久久久久久久久久99999| 91亚洲精品久久久蜜桃网站| 日韩av成人高清| 国产精品高潮呻吟| 欧美成人福利视频| 欧美视频日韩视频| 欧美日韩高清影院| 91丨porny丨最新| 91片在线免费观看| 色香色香欲天天天影视综合网| 九九久久精品视频| 香蕉成人伊视频在线观看| 国产精品丝袜黑色高跟| 亚洲欧洲日本在线| 欧美男人的天堂一二区| 欧美在线视频不卡| 欧美情侣在线播放| 精品国产凹凸成av人网站| 在线欧美日韩精品| 欧美日韩国产高清一区二区| 欧美大黄免费观看| 欧美一级夜夜爽| 欧美美女一区二区在线观看| 91年精品国产| 91精品在线一区二区| 在线观看av一区二区| 欧美一区二区三区啪啪| 国产欧美一区二区精品性色超碰| 亚洲视频每日更新| 狠狠色综合日日| 三级欧美韩日大片在线看| 欧美激情一区二区三区蜜桃视频| 激情伊人五月天久久综合| 国产精品一二三四| 极品少妇一区二区| 91免费观看视频| 欧美电影免费观看高清完整版在线观看 | 欧美久久久一区| 精品久久99ma| 亚洲亚洲精品在线观看| 久久综合国产精品| 日韩免费成人网| 亚洲啪啪综合av一区二区三区| 中文欧美字幕免费| 日韩成人伦理电影在线观看| 丝瓜av网站精品一区二区| 亚洲综合视频网| 国产精品少妇自拍| 日韩电影在线观看电影| 国产91色综合久久免费分享| 欧美一区二区三区思思人| 中文字幕亚洲精品在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久国产精品色| 国产一区二区在线看| 成人做爰69片免费看网站| av一区二区三区在线| 日本道免费精品一区二区三区| 色综合天天综合在线视频| 色综合久久综合| 欧美国产乱子伦 | 在线视频观看一区| 亚洲精选视频免费看| 久久这里只有精品视频网| 亚洲va欧美va人人爽| 色综合欧美在线| 亚洲免费大片在线观看| 9人人澡人人爽人人精品| 欧美国产禁国产网站cc| 国产suv精品一区二区883| 精品福利一区二区三区| 精品无码三级在线观看视频| 欧美一级二级三级蜜桃| 亚洲国产成人在线| 成人深夜视频在线观看| 欧美激情自拍偷拍| 97成人超碰视| 精品成人佐山爱一区二区| 蜜桃一区二区三区在线观看| 欧美成人a视频| 麻豆精品国产传媒mv男同| 欧美tickling挠脚心丨vk| 裸体歌舞表演一区二区| 精品国产乱码久久久久久老虎| 精品午夜久久福利影院| 久久精品视频在线免费观看 | 中文字幕高清一区| 波多野结衣中文字幕一区二区三区| 欧美日韩在线播放| 欧美极品另类videosde| 色婷婷久久久综合中文字幕| 亚洲午夜视频在线观看| 欧美zozozo| 99久久精品国产导航| 亚洲国产精品久久久男人的天堂| 欧美一区二区三区四区在线观看 | 专区另类欧美日韩| 在线视频一区二区免费| 日韩黄色在线观看| 国产欧美日韩综合精品一区二区| 一本大道久久a久久精二百 | 美女网站色91| 国产精品青草久久| 欧美日韩国产经典色站一区二区三区| 精品在线免费观看| 亚洲永久精品大片| 国产欧美精品一区二区色综合朱莉| 色av成人天堂桃色av| 精品亚洲国产成人av制服丝袜| 一区二区三区四区高清精品免费观看| 本田岬高潮一区二区三区| 亚州成人在线电影| 国产精品乱人伦| 欧美成人乱码一区二区三区| 91美女蜜桃在线| 国产麻豆精品久久一二三| 亚洲综合久久久| 国产女人18毛片水真多成人如厕| 欧美日韩dvd在线观看| 国产一区在线观看视频| 亚洲一区视频在线| 国产精品福利在线播放| 日韩色视频在线观看| 欧美性猛片xxxx免费看久爱 | 久久久久综合网| 欧美巨大另类极品videosbest| 91蜜桃在线观看| 国产精品18久久久久久久网站| 视频一区二区中文字幕| 一区二区三区日韩欧美| 国产精品传媒入口麻豆| 久久久久久电影| 精品久久久网站| 日韩一级片网站| 欧美一区二区视频在线观看2020 | 国产不卡在线一区| 精品无人码麻豆乱码1区2区 | 久久亚洲精品国产精品紫薇| 欧美日韩国产综合一区二区 | 欧美精品一区视频| 日韩小视频在线观看专区| 91 com成人网| 精品视频一区 二区 三区| 色综合久久99| 欧洲视频一区二区| 在线视频综合导航| 欧美三级资源在线| 欧美综合久久久| 欧美日韩精品专区| 欧美精品 国产精品| 7777精品久久久大香线蕉| 正在播放亚洲一区| 欧美videossexotv100| 精品国产成人系列| 国产精品嫩草99a| 中文字幕在线不卡一区| 亚洲人成网站在线| 亚洲一区视频在线| 日韩福利视频网| 老司机精品视频在线| 国产福利91精品一区二区三区| 亚洲第一成人在线| 日韩高清不卡在线| 国产精品综合二区| 99久久精品免费精品国产| 欧美综合欧美视频| 欧美一区二区三区在线看| 精品国产一区a| 国产精品日日摸夜夜摸av| 亚洲中国最大av网站| 美脚の诱脚舐め脚责91| 高清视频一区二区| 欧美日韩在线免费视频| 欧美区一区二区三区| 精品国产99国产精品| 国产精品进线69影院| 亚洲成人精品影院| 国产精品亚洲一区二区三区在线 | 国产精品女同一区二区三区| 亚洲一区二区四区蜜桃| 蜜臀久久99精品久久久久宅男 | a4yy欧美一区二区三区| 欧美日韩国产乱码电影| 久久综合色婷婷| 亚洲一区二区综合| 激情成人午夜视频| 色欧美乱欧美15图片| 久久久国产精品不卡| 一区二区欧美在线观看| 国产精选一区二区三区|