232 lines
7.8 KiB
C++
232 lines
7.8 KiB
C++
//---------------------------------------------------------------------------
|
|
#ifndef wxToolsH
|
|
#define wxToolsH
|
|
//---------------------------------------------------------------------------
|
|
#include <wx/string.h>
|
|
#include <wx/stream.h>
|
|
#include <wx/ffile.h>
|
|
#include <wx/html/htmlwin.h>
|
|
#include <wx/mstream.h>
|
|
|
|
#include <wx/msw/msvcrt.h>
|
|
|
|
#include "structs.h"
|
|
//---------------------------------------------------------------------------
|
|
typedef unsigned int uint4;
|
|
typedef unsigned char uint1;
|
|
//---------------------------------------------------------------------------
|
|
//Êðîññ ïëàòôîðìåííûå ôóíêöèè
|
|
//#if defined( _WX )
|
|
//wxString getExecutablePath();
|
|
|
|
wxString getStringOnUrl(const wxString path); //Ïîëó÷èòü ñòðîêó ñ âåá ñåâåðà
|
|
bool getFileOnWebServer(const wxString url,const wxString path); //Ñîõðàíèòü ôàéë ñ âåá ñåðâåðà
|
|
unsigned char* getDataFromURL(const wxString url,unsigned int* size); //ïîëó÷èòü ìàññèâ áàéò ñ âåá ñåðâåðà (Åñëè!=NULL òî ïåðâûé uint4 êîë-âî áàéò)
|
|
|
|
wxString getBeforeFirst(wxString str,wxString separator);
|
|
wxString getBeforeLast(wxString str,wxChar separator);
|
|
wxString getAfterFirst(wxString str,wxString separator);
|
|
wxString getAfterLast(wxString str,wxChar separator);
|
|
wxString getSubString(wxString str, wxString bracket1,wxString bracket2);
|
|
wxString replaceStrings(wxString sors,wxString find,wxString repl); //çàìåíèòü âñå âõîæäåíèÿ ñòðîêè find â sors íà ñòðîêó repl
|
|
|
|
void replaseChars(wxString& str,wxChar oldCh,wxChar newCh); ///<Çàìåíèòü ñèìâîë íà íîâûé
|
|
|
|
wxString cutFirstSubStr(wxString &string,wxChar separator); //âûðåçàòü ïîä ñòðîêó
|
|
wxString cutFirstSubStr(wxString &string,char ch); //âûðåçàòü ïîä ñòðîêó
|
|
|
|
wxString getFloatString(wxString str); ///<Âûðåçàòü èç ñòðîêè âñ¸ êðîìå öèôð
|
|
wxString IntToStr(unsigned long i);
|
|
wxString FloatToStr(float f, int numdigits = -1);
|
|
wxString DoubleToStr(double d, int numdigits = -1);
|
|
int StrToInt(wxString str);
|
|
int StrFullToInt(wxString str); //Âûðåçàòü èç ñòðîêè òîëüêî öèôåðêè è ïðåîáðàçîâàòü
|
|
unsigned int StrFullToUInt(wxString str); //Âûðåçàòü èç ñòðîêè òîëüêî öèôåðêè è ïðåîáðàçîâàòü
|
|
double StrToDouble(wxString str);
|
|
wxString md5String(wxString val);
|
|
|
|
|
|
wxString loadUTF8String(wxInputStream *is);
|
|
wxString loadUTF8String(wxFFile *is);
|
|
void saveUTF8String(wxOutputStream *os, wxString str);
|
|
void saveUTF8String(wxFFile *os, wxString str);
|
|
void saveUTF8String2(wxOutputStream *os, wxString str); //2 áàéòè ïîä ðàçìåð ñòðîêè
|
|
//#endif
|
|
//------------------------------------------------------------------------------
|
|
class MyHtmlWindow : public wxHtmlWindow
|
|
{
|
|
public:
|
|
MyHtmlWindow(wxWindow *parent) : wxHtmlWindow( parent, -1, wxPoint(10,10), wxSize(200,200) ) { }
|
|
virtual wxHtmlOpeningStatus OnOpeningURL(wxHtmlURLType WXUNUSED(type),
|
|
const wxString& WXUNUSED(url),
|
|
wxString *WXUNUSED(redirect)) const;
|
|
virtual void OnLinkClicked(const wxHtmlLinkInfo& link);
|
|
private:
|
|
DECLARE_NO_COPY_CLASS(MyHtmlWindow)
|
|
};
|
|
//------------------------------------------------------------------------------
|
|
typedef float (*MyFuncPtrType)(unsigned int, unsigned char*, void*);
|
|
struct RClientData //ýëåìåíò çàäàíèÿ
|
|
{
|
|
wxString url; //Îòêóäà áóäóò âçÿòû äàííûå
|
|
int clientInt; //Êëèåíòñêèå äàííûå
|
|
wxString clientStr; //Êëèåíòñêèå äàííûå
|
|
void* clientData; //Êëèåíòñêèå äàííûå
|
|
MyFuncPtrType clientFun; //Ôóíêöèÿ äëÿ îáðàáîòêè äàííûûõ (â ðàìêàõ òåêóùåãî ïîòîêà)
|
|
|
|
//À âîò è ñàìîå ãëàâíîå
|
|
unsigned int size; //Ðàçìåð äàííûõ ñ ñåðâåðà
|
|
unsigned char* data; //Ñàìè äàííûå ñ ñåðâåðà
|
|
};
|
|
//------------------------------------------------------------------------------
|
|
//Êëàññ - ìåíåäæåð çàäàíèé
|
|
class TTask: public wxThread
|
|
{
|
|
protected:
|
|
wxCriticalSection* critsectA; //Äëÿ îòâåòà
|
|
wxCriticalSection* critsectR; //Äëÿ çàïðîñà
|
|
TSimpleList<RClientData*>* listAnswer; //Ñïèñîê îòâåòîâ
|
|
TSimpleList<RClientData*>* listRequest; //Ñïèñîê çàïðîñîâ
|
|
bool m_Cancel;
|
|
int m_delay; //Çàäåðæêà â ìèëèñåêóíäàï ïåðåä âûïîëíåíèåì ñëåäóþùåãî çàäàíèÿ
|
|
public:
|
|
TTask(int delay);
|
|
~TTask()
|
|
{
|
|
delete critsectA;
|
|
delete critsectR;
|
|
delete listAnswer;
|
|
delete listRequest;
|
|
};
|
|
void addTask(RClientData* task) //Äîáàâèòü çàäàíèå â ñïèñîê
|
|
{
|
|
critsectR->Enter();
|
|
listRequest->add(task);
|
|
critsectR->Leave();
|
|
};
|
|
RClientData* getTask() //Òîò æå îáúåêò ÷òî è äîáàâèëè òîëüêî ñ äàííûìè
|
|
{ RClientData* result=NULL;
|
|
critsectR->Enter();
|
|
if(listRequest->count()>0)
|
|
{
|
|
result=listRequest->get(0);
|
|
listRequest->del((unsigned int)0);
|
|
}
|
|
critsectR->Leave();
|
|
return result;
|
|
};
|
|
void addAnswer(RClientData* answer)
|
|
{
|
|
critsectA->Enter();
|
|
listAnswer->add(answer);
|
|
critsectA->Leave();
|
|
};
|
|
RClientData* getAnswer() //Òîò æå îáúåêò ÷òî è äîáàâèëè òîëüêî ñ äàííûìè
|
|
{ RClientData* result=NULL;
|
|
critsectA->Enter();
|
|
if(listAnswer->count()>0)
|
|
{
|
|
result=listAnswer->get(0);
|
|
listAnswer->del((unsigned int)0);
|
|
}
|
|
critsectA->Leave();
|
|
return result;
|
|
};
|
|
virtual void* Entry(); //Ôóíêöèÿ ïîòîêà äëÿ îáðàáîòêè çàäàíèé
|
|
void Cancel(){m_Cancel=true;};
|
|
};
|
|
//------------------------------------------------------------------------------
|
|
//òèïà àññîöèàòèâíûé ìàññèâ äëÿ ñòðîê
|
|
struct TAssoStruct
|
|
{
|
|
wxString ident;
|
|
wxString value;
|
|
};
|
|
|
|
class TAMas
|
|
{
|
|
public:
|
|
wxString getAt(wxString id);
|
|
void setAt(wxString id,wxString val);
|
|
//void del(wxString id);
|
|
void Copy(TAMas& res);
|
|
|
|
//wxString operator [](int i) { return m_val[i]; };
|
|
|
|
private:
|
|
wxString str;
|
|
wxArrayString m_id,m_val;
|
|
};
|
|
//------------------------------------------------------------------------------
|
|
struct TIniStruct
|
|
{
|
|
TIniStruct *next; //Ñëåä. çíà÷åíèå
|
|
wxString section; //Ñåêöèÿ
|
|
wxString ident; //Èäåíòèôèêàòîð
|
|
wxString value; //Çíà÷åíèå
|
|
};
|
|
|
|
class TIniFile
|
|
{
|
|
private:
|
|
wxString path;
|
|
TIniStruct *first; //Ïåðâûé èç ñïèñêà
|
|
TIniStruct *last;
|
|
public:
|
|
TIniFile(wxString path);
|
|
virtual ~TIniFile();
|
|
wxString ReadString(wxString Section,wxString Ident,wxString Default);
|
|
float ReadFloat(wxString Section,wxString Ident,float Default);
|
|
long ReadLong(wxString Section,wxString Ident,long Default);
|
|
unsigned long ReadULong(wxString Section,wxString Ident,unsigned long Default);
|
|
bool ReadBool(wxString Section,wxString Ident,bool Default);
|
|
void WriteString(wxString Section,wxString Ident,wxString Value);
|
|
void WriteFloat(wxString Section,wxString Ident,float Value);
|
|
void WriteLong(wxString Section,wxString Ident,long Value);
|
|
void WriteULong(wxString Section,wxString Ident,unsigned long Value);
|
|
void WriteBool(wxString Section,wxString Ident,bool Value);
|
|
void Save(); //Ñîõðàíèòü èç ïàìÿòè â ôàéë
|
|
};
|
|
//------------------------------------------------------------------------------
|
|
//äëÿ ìàññèâà ïîòîêîâ
|
|
struct LStream
|
|
{
|
|
wxMemoryInputStream *is;
|
|
wxString name; //íàçâàíèå ôàéëà
|
|
char *data; //èñïîëüçóåòüñÿ â wxMemoryInputStream äî åãî óäàëåíèÿ
|
|
unsigned int size; //íà âñÿê ñëó÷àé ðàçìåð áóôåðà
|
|
};
|
|
//------------------------------------------------------------------------------
|
|
//ñïèñîê èìåííîâàííûõ ïîòîêîâ
|
|
class TFileList
|
|
{
|
|
private:
|
|
LStream **List; //Ìàññèâ ïîòîêîâ
|
|
unsigned int count; //êîëè÷åñòâî çàïîëíåííûõ
|
|
unsigned int size; //ðàçìåð ìàññèâà List
|
|
public:
|
|
TFileList();
|
|
~TFileList();
|
|
void add(wxInputStream *is,wxString name);
|
|
wxInputStream* get(wxString name);
|
|
unsigned int getCount();
|
|
LStream* item(unsigned int i);
|
|
};
|
|
//------------------------------------------------------------------------------
|
|
extern const wxEventType wxID_DOWNLOAD_COMPLETE;
|
|
//Çàãðóçêà ôàéëà â îòäåëüíîì ïîòîêå ïî http
|
|
class THTTPDownload: public wxThread
|
|
{
|
|
private:
|
|
protected:
|
|
wxEvtHandler *m_Parent; //ñëóøàòåëü ñîáûòèÿ çàâåðøåíèÿ çàãðóçêè
|
|
RClientData* m_CD; //Çàäàíèå äëÿ ïîòîêà
|
|
bool m_Cancel;
|
|
public:
|
|
THTTPDownload(wxEvtHandler *parent,wxString url,int userInt,wxString userStr,void* userData,MyFuncPtrType userFun);
|
|
~THTTPDownload();
|
|
virtual void* Entry();
|
|
//void Cancel();
|
|
};
|
|
//------------------------------------------------------------------------------
|
|
#endif |