123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414 |
- //---------------------------------------------------------------------------
- #include <vcl.h>
- //#include <iostream>
- #include <DBXJSON.hpp>
- #include "IdBaseComponent.hpp"
- #include "IdComponent.hpp"
- #include "IdHTTP.hpp"
- #include "IdTCPClient.hpp"
- #include "IdTCPConnection.hpp"
- #pragma hdrstop
- //#include "McJSON.hpp"
- //https://github.com/hydrobyte/McJSON
- #include "RestObjectF.h"
- //---------------------------------------------------------------------------
- #pragma package(smart_init)
- TRestData::TRestData()
- {
- }
- //---------------------------------------------------------------------------
- TRestData::~TRestData()
- {
- }
- //---------------------------------------------------------------------------
- TRestObject::TRestObject()
- {
- }
- //---------------------------------------------------------------------------
- TRestObject::~TRestObject()
- {
- }
- //---------------------------------------------------------------------------
- TRestObjectList::TRestObjectList()
- {
- }
- //---------------------------------------------------------------------------
- TRestObjectList::~TRestObjectList()
- {
- }
- //---------------------------------------------------------------------------
- //---------------------------------------------------------------------------
- //TRestObjectManager *ObjCtlrManager = NULL;
- //---------------------------------------------------------------------------
- TRestObjectManager::TRestObjectManager()
- {
- }
- //---------------------------------------------------------------------------
- TRestObjectManager::~TRestObjectManager()
- {
- }
- //---------------------------------------------------------------------------
- String TRestObjectManager::Get(String AApiUrl, TForm *AParent)
- {
- //S := TIdURI.URLEncode(str);
- String result = "";
- TIdHTTP *IdHTTP1 = new TIdHTTP(NULL);
- TMemoryStream *stream = new TMemoryStream();
- TMemo *memo = new TMemo(AParent);
- try {
- try {
- memo->Visible = false;
- memo->Parent = AParent;
- IdHTTP1->Request->Clear();
- IdHTTP1->Request->BasicAuthentication = false;
- IdHTTP1->Request->ContentType = "application/json; charset=utf8";
- IdHTTP1->Request->Accept = "application/json; charset=utf8";
- IdHTTP1->Request->CharSet = "utf-8";
- //IdHTTP1->Request->ContentEncoding = "utf-8";
- IdHTTP1->ReadTimeout = 5000;
- IdHTTP1->AllowCookies = false;
- IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
- //IdHTTP1->IOHandler->DefStringEncoding = TEncoding::GetEncoding(949);
- //result = IdHTTP1->Get(AApiUrl);
- //return result;
- IdHTTP1->Get(AApiUrl, stream);
- stream->Position = 0;
- memo->Lines->BeginUpdate();
- memo->Lines->LoadFromStream(stream, TEncoding::UTF8);
- memo->Lines->EndUpdate();
- result = memo->Text.Trim();
- IdHTTP1->Disconnect();
- IdHTTP1->IOHandler->InputBuffer->Clear();
- } catch(Exception &e) {
- }
- } __finally {
- if (IdHTTP1) delete IdHTTP1;
- if (stream) delete stream;
- if (memo) delete memo;
- }
- return result;
- //RawByteString rbstr = (char*)(urlStream->Memory);
- //if (Pos("utf-8", IdHTTP1->Response->ContentType)==0 && (Pos("charset=utf-8", rbstr)==0))
- // SetCodePage(rbstr, 949, false);
- //else
- //SetCodePage(rbstr, 65001, false);
- //String sResult = rbstr;
- }
- //---------------------------------------------------------------------------
- TStream* TRestObjectManager::GetStream(String AApiUrl)
- {
- String result = "";
- TIdHTTP *IdHTTP1 = new TIdHTTP(NULL);
- TMemoryStream *stream = new TMemoryStream();
- try {
- try {
- IdHTTP1->Request->Clear();
- IdHTTP1->Request->BasicAuthentication = false;
- IdHTTP1->Request->ContentType = "application/json; charset=utf8";
- IdHTTP1->Request->Accept = "application/json; charset=utf8";
- IdHTTP1->Request->CharSet = "utf-8";
- //IdHTTP1->Request->ContentEncoding = "utf-8";
- IdHTTP1->ReadTimeout = 5000;
- IdHTTP1->AllowCookies = false;
- IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
- //IdHTTP1->IOHandler->DefStringEncoding = TEncoding::GetEncoding(949);
- //result = IdHTTP1->Get(AApiUrl);
- //return result;
- IdHTTP1->Get(AApiUrl, stream);
- stream->Position = 0;
- IdHTTP1->Disconnect();
- IdHTTP1->IOHandler->InputBuffer->Clear();
- } catch(Exception &e) {
- }
- } __finally {
- if (IdHTTP1) delete IdHTTP1;
- }
- return stream;
- //RawByteString rbstr = (char*)(urlStream->Memory);
- //if (Pos("utf-8", IdHTTP1->Response->ContentType)==0 && (Pos("charset=utf-8", rbstr)==0))
- // SetCodePage(rbstr, 949, false);
- //else
- //SetCodePage(rbstr, 65001, false);
- //String sResult = rbstr;
- }
- //---------------------------------------------------------------------------
- TMcJsonItem* TRestObjectManager::ParseJsonString(String AJsonData)
- {
- String AData = AJsonData.Trim();
- TMcJsonItem *Json = new TMcJsonItem();
- try {
- Json->AsJSON = AData;
- } catch(Exception &e) {
- }
- return Json;
- }
- //---------------------------------------------------------------------------
- TMcJsonItem* TRestObjectManager::ParseJsonStream(TStream *AStream)
- {
- TMcJsonItem *Json = new TMcJsonItem();
- try {
- Json->LoadFromStream(AStream, true);
- } catch(Exception &e) {
- }
- return Json;
- }
- //---------------------------------------------------------------------------
- String TRestObjectManager::GetValue(TMcJsonItem *AItem, String AKey)
- {
- String result = "";
- if (AItem) {
- TMcJsonItem *value = AItem->Values[AKey];
- if (value) {
- result = value->AsString;
- }
- }
- return result;
- }
- //---------------------------------------------------------------------------
- #if 0
- TJSONArray *jsonArr = NULL;
- try {
- reMsg->Lines->BeginUpdate();
- try {
- /*TBytes data;
- data.Length = AData.Length();
- ZeroMemory(&data[0], data.Length);
- CopyMemory(&data[0], AData.c_str(), data.Length);*/
- TStringStream *stream = new TStringStream(AData, TEncoding::UTF8);
- jsonArr = (TJSONArray*)TJSONObject::ParseJSONValue(TEncoding::UTF8->GetBytes(AData), 0);
- jsonArr = (TJSONArray*)TJSONObject::ParseJSONValue(TEncoding::UTF8->GetBytes(AData), 0);
- if (!jsonArr) {
- reMsg->Lines->Add("*******************************************: ");
- reMsg->Lines->Add("JSON Data Reading Failed: ");
- reMsg->Lines->Add("*******************************************: ");
- return;
- }
- reMsg->Lines->Add("Objects: " + String(jsonArr->Size()));
- reMsg->Lines->Add("*******************************************: ");
- cameraNmbr = "";
- cameraId = "";
- cameraNm = "";
- cameraIp = "";
- cameraStream = "";
- for (int ii = 0; ii < jsonArr->Size(); ii++) {
- TJSONObject *jo = (TJSONObject*)jsonArr->Get(ii);
- for (int jj = 0; jj < jo->Size(); jj++) {
- TJSONPair *obj = jo->Get(jj);
- if (obj->JsonString->Value() == CAMERA_NMBR) {
- cameraNmbr = obj->JsonValue->Value();
- }
- else if (obj->JsonString->Value() == CAMERA_ID) {
- cameraId = obj->JsonValue->Value();
- }
- else if (obj->JsonString->Value() == CAMERA_NM) {
- cameraNm = obj->JsonValue->Value();
- /*
- String sStrVal = obj->JsonValue->Value();
- reMsg->Lines->Add(TEncoding::Default->GetString(TEncoding::Default->GetBytes(sStrVal)));
- reMsg->Lines->Add(TEncoding::UTF8->GetString(TEncoding::UTF8->GetBytes(sStrVal)));
- reMsg->Lines->Add(TEncoding::UTF7->GetString(TEncoding::UTF7->GetBytes(sStrVal)));
- reMsg->Lines->Add(TEncoding::Unicode->GetString(TEncoding::Unicode->GetBytes(sStrVal)));
- reMsg->Lines->Add((TEncoding::UTF8->GetBytes(sStrVal)));
- reMsg->Lines->Add((TEncoding::UTF7->GetBytes(sStrVal)));
- reMsg->Lines->Add((TEncoding::Unicode->GetBytes(sStrVal)));
- */
- }
- else if (obj->JsonString->Value() == CAMERA_IP) {
- cameraIp = obj->JsonValue->Value();
- }
- else if (obj->JsonString->Value() == CAMERA_STREAM) {
- cameraStream = obj->JsonValue->Value();
- }
- }
- reMsg->Lines->Add(cameraNmbr + "," + cameraId + "," + cameraNm + "," + cameraIp + "," + cameraStream);
- ObjCtlrManager->SaveCameraInfo(ii+1, cameraNmbr, cameraId, cameraNm, cameraIp, cameraStream, "");
- }
- } catch(Exception &e) {
- }
- } __finally {
- if (jsonArr) jsonArr->Free();
- reMsg->Lines->EndUpdate();
- }
- #endif
- #if 0
- reMsg->Lines->BeginUpdate();
- AData = StringReplace(AData, "[", "", TReplaceFlags() << rfReplaceAll);
- AData = StringReplace(AData, "]", "", TReplaceFlags() << rfReplaceAll);
- AData = StringReplace(AData, "},", "}", TReplaceFlags() << rfReplaceAll);
- //AData = StringReplace(AData, "{", "", TReplaceFlags() << rfReplaceAll);
- TStringList *pStringList = new TStringList;
- try {
- pStringList->Delimiter = '}';
- pStringList->StrictDelimiter = true;
- pStringList->DelimitedText = AData;
- for (int ii = 0; ii < pStringList->Count; ii++) {
- //reMsg->Lines->Add("*******************************************: " + String(ii+1));
- //reMsg->Lines->Add(pStringList->Strings[ii]);
- }
- } __finally {
- if (pStringList) delete pStringList;
- }
- reMsg->Lines->EndUpdate();
- //return;
- #endif
- //String sFileName = "C:\\UTF8FileName.xml";
- //Memo1->Lines->LoadFromFile(sFileName, TEncoding::UTF8);
- //reMsg->Lines->Clear();
- //reMsg->Lines->Add(AData);
- //String((char *)pMemoryStream->Memory, pMemoryStream->Size);
- #include <OleAuto.h>
- char* UTF8ToANSI(const char *pszCode)
- {
- BSTR bstrWide;
- char* pszAnsi;
- int nLength;
- // Get nLength of the Wide Char buffer
- nLength = MultiByteToWideChar(CP_UTF8, 0, pszCode, strlen(pszCode) + 1,
- NULL, NULL);
- bstrWide = SysAllocStringLen(NULL, nLength);
- // Change UTF-8 to Unicode (UTF-16)
- MultiByteToWideChar(CP_UTF8, 0, pszCode, strlen(pszCode) + 1, bstrWide, nLength);
- // Get nLength of the multi byte buffer
- nLength = WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, NULL, 0, NULL, NULL);
- pszAnsi = new char[nLength];
- // Change from unicode to mult byte
- WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, pszAnsi, nLength, NULL, NULL);
- SysFreeString(bstrWide);
- return pszAnsi;
- }
- AnsiString __fastcall Utf8ToAscii(UTF8String AUtf8)
- {
- int nLen;
- WideString sUtf16;
- AnsiString sAscii = "";
- nLen = ::MultiByteToWideChar(CP_UTF8, 0, AUtf8.c_str(), AUtf8.Length(), NULL, 0);
- sUtf16.SetLength(nLen);
- ::MultiByteToWideChar(CP_UTF8, 0, AUtf8.c_str(), AUtf8.Length(), sUtf16.c_bstr(), nLen);
- nLen = ::WideCharToMultiByte(CP_ACP, 0, sUtf16.c_bstr(), sUtf16.Length(), NULL, 0, NULL, NULL);
- sAscii.SetLength(nLen);
- ::WideCharToMultiByte(CP_ACP, 0, sUtf16.c_bstr(), sUtf16.Length(), sAscii.c_str(), nLen, NULL, NULL);
- return sAscii;
- }
- //---------------------------------------------------------------------------
- #if 0
- TJSONArray *jsonArr = NULL;
- try {
- reMsg->Lines->BeginUpdate();
- try {
- //TStringStream *stream = new TStringStream(AData, TEncoding::UTF8);
- //jsonArr = (TJSONArray*)TJSONObject::ParseJSONValue(TEncoding::UTF8->GetBytes(AnsiString(AData)), 0);
- jsonArr = (TJSONArray*)TJSONObject::ParseJSONValue(BytesOf(AData), 0);
- //jsonArr = (TJSONArray*)TJSONObject::ParseJSONValue(stream->DataString, 0);
- if (!jsonArr) {
- reMsg->Lines->Add("*******************************************: ");
- reMsg->Lines->Add("JSON Data Reading Failed: ");
- reMsg->Lines->Add("*******************************************: ");
- return;
- }
- reMsg->Lines->Add("Objects: " + String(jsonArr->Size()));
- reMsg->Lines->Add("*******************************************: ");
- cameraNmbr = "";
- cameraId = "";
- cameraNm = "";
- cameraIp = "";
- cameraStream = "";
- for (int ii = 0; ii < jsonArr->Size(); ii++) {
- TJSONObject *jo = (TJSONObject*)jsonArr->Get(ii);
- for (int jj = 0; jj < jo->Size(); jj++) {
- TJSONPair *obj = jo->Get(jj);
- if (obj->JsonString->Value() == CAMERA_NMBR) {
- cameraNmbr = obj->JsonValue->Value();
- }
- else if (obj->JsonString->Value() == CAMERA_ID) {
- cameraId = obj->JsonValue->Value();
- }
- else if (obj->JsonString->Value() == CAMERA_NM) {
- cameraNm = obj->JsonValue->Value();
- //RawByteString rbstr = (char*)(AnsiString(cameraNm).c_str());
- //SetCodePage(rbstr, 949, false);
- //cameraNm = rbstr;
- //cameraNm= String(UTF8ToANSI(AnsiString(cameraNm).c_str()));
- reMsg->Lines->Add(cameraNm);
- cameraNm = (UTF8String)(obj->JsonValue->Value()).c_str();
- /*
- String sStrVal = obj->JsonValue->Value();
- reMsg->Lines->Add(TEncoding::Default->GetString(TEncoding::Default->GetBytes(sStrVal)));
- reMsg->Lines->Add(TEncoding::UTF8->GetString(TEncoding::UTF8->GetBytes(sStrVal)));
- reMsg->Lines->Add(TEncoding::UTF7->GetString(TEncoding::UTF7->GetBytes(sStrVal)));
- reMsg->Lines->Add(TEncoding::Unicode->GetString(TEncoding::Unicode->GetBytes(sStrVal)));
- reMsg->Lines->Add((TEncoding::UTF8->GetBytes(sStrVal)));
- reMsg->Lines->Add((TEncoding::UTF7->GetBytes(sStrVal)));
- reMsg->Lines->Add((TEncoding::Unicode->GetBytes(sStrVal)));
- */
- }
- else if (obj->JsonString->Value() == CAMERA_IP) {
- cameraIp = obj->JsonValue->Value();
- }
- else if (obj->JsonString->Value() == CAMERA_STREAM) {
- cameraStream = obj->JsonValue->Value();
- }
- }
- reMsg->Lines->Add(cameraNmbr + "," + cameraId + "," + cameraNm + "," + cameraIp + "," + cameraStream);
- ObjCtlrManager->SaveCameraInfo(ii+1, cameraNmbr, cameraId, cameraNm, cameraIp, cameraStream, "");
- }
- } catch(Exception &e) {
- }
- } __finally {
- if (jsonArr) jsonArr->Free();
- reMsg->Lines->EndUpdate();
- }
- #endif
|