RestObjectF.cpp 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. //#include <iostream>
  4. #include <DBXJSON.hpp>
  5. #include "IdBaseComponent.hpp"
  6. #include "IdComponent.hpp"
  7. #include "IdHTTP.hpp"
  8. #include "IdTCPClient.hpp"
  9. #include "IdTCPConnection.hpp"
  10. //#include "IdIcmpClient.hpp"
  11. //#include "IdRawBase.hpp"
  12. //#include "IdRawClient.hpp"
  13. //#include "IdAuthenticationDigest.hpp"
  14. #pragma hdrstop
  15. //#include "McJSON.hpp"
  16. //https://github.com/hydrobyte/McJSON
  17. //https://github.com/fabriciocolombo/delphi-rest-client-api
  18. #include "RestObjectF.h"
  19. //---------------------------------------------------------------------------
  20. #pragma package(smart_init)
  21. TRestData::TRestData()
  22. {
  23. }
  24. //---------------------------------------------------------------------------
  25. TRestData::~TRestData()
  26. {
  27. }
  28. //---------------------------------------------------------------------------
  29. TRestObject::TRestObject()
  30. {
  31. }
  32. //---------------------------------------------------------------------------
  33. TRestObject::~TRestObject()
  34. {
  35. }
  36. //---------------------------------------------------------------------------
  37. TRestObjectList::TRestObjectList()
  38. {
  39. }
  40. //---------------------------------------------------------------------------
  41. TRestObjectList::~TRestObjectList()
  42. {
  43. }
  44. //---------------------------------------------------------------------------
  45. //---------------------------------------------------------------------------
  46. //TRestObjectManager *ObjCtlrManager = NULL;
  47. //---------------------------------------------------------------------------
  48. TRestObjectManager::TRestObjectManager()
  49. {
  50. }
  51. //---------------------------------------------------------------------------
  52. TRestObjectManager::~TRestObjectManager()
  53. {
  54. }
  55. //---------------------------------------------------------------------------
  56. String TRestObjectManager::Get(String AApiUrl, TForm *AParent)
  57. {
  58. //S := TIdURI.URLEncode(str);
  59. String result = "";
  60. TIdHTTP *IdHTTP1 = new TIdHTTP(NULL);
  61. TMemoryStream *stream = new TMemoryStream();
  62. TMemo *memo = new TMemo(AParent);
  63. try {
  64. try {
  65. memo->Visible = false;
  66. memo->Parent = AParent;
  67. IdHTTP1->Request->Clear();
  68. IdHTTP1->Request->BasicAuthentication = false;
  69. IdHTTP1->Request->ContentType = "application/json; charset=utf8";
  70. IdHTTP1->Request->Accept = "application/json; charset=utf8";
  71. IdHTTP1->Request->CharSet = "utf-8";
  72. //IdHTTP1->Request->ContentEncoding = "utf-8";
  73. IdHTTP1->ReadTimeout = 20000;
  74. IdHTTP1->AllowCookies = false;
  75. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
  76. //IdHTTP1->IOHandler->DefStringEncoding = TEncoding::GetEncoding(949);
  77. //result = IdHTTP1->Get(AApiUrl);
  78. //return result;
  79. IdHTTP1->Get(AApiUrl, stream);
  80. stream->Position = 0;
  81. memo->Lines->BeginUpdate();
  82. memo->Lines->LoadFromStream(stream, TEncoding::UTF8);
  83. memo->Lines->EndUpdate();
  84. result = memo->Text.Trim();
  85. IdHTTP1->Disconnect();
  86. IdHTTP1->IOHandler->InputBuffer->Clear();
  87. } catch(Exception &e) {
  88. }
  89. } __finally {
  90. if (IdHTTP1) delete IdHTTP1;
  91. if (stream) delete stream;
  92. if (memo) delete memo;
  93. }
  94. return result;
  95. //RawByteString rbstr = (char*)(urlStream->Memory);
  96. //if (Pos("utf-8", IdHTTP1->Response->ContentType)==0 && (Pos("charset=utf-8", rbstr)==0))
  97. // SetCodePage(rbstr, 949, false);
  98. //else
  99. //SetCodePage(rbstr, 65001, false);
  100. //String sResult = rbstr;
  101. }
  102. //---------------------------------------------------------------------------
  103. TStream* TRestObjectManager::GetStream(String AApiUrl)
  104. {
  105. String result = "";
  106. TIdHTTP *IdHTTP1 = new TIdHTTP(NULL);
  107. TMemoryStream *stream = new TMemoryStream();
  108. try {
  109. try {
  110. IdHTTP1->Request->Clear();
  111. IdHTTP1->Request->BasicAuthentication = false;
  112. IdHTTP1->Request->ContentType = "application/json; charset=utf8";
  113. IdHTTP1->Request->Accept = "application/json; charset=utf8";
  114. IdHTTP1->Request->CharSet = "utf-8";
  115. //IdHTTP1->Request->ContentEncoding = "utf-8";
  116. IdHTTP1->ReadTimeout = 20000;
  117. IdHTTP1->AllowCookies = false;
  118. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
  119. //IdHTTP1->IOHandler->DefStringEncoding = TEncoding::GetEncoding(949);
  120. //result = IdHTTP1->Get(AApiUrl);
  121. //return result;
  122. IdHTTP1->Get(AApiUrl, stream);
  123. stream->Position = 0;
  124. IdHTTP1->Disconnect();
  125. IdHTTP1->IOHandler->InputBuffer->Clear();
  126. } catch(Exception &e) {
  127. }
  128. } __finally {
  129. if (IdHTTP1) delete IdHTTP1;
  130. }
  131. return stream;
  132. //RawByteString rbstr = (char*)(urlStream->Memory);
  133. //if (Pos("utf-8", IdHTTP1->Response->ContentType)==0 && (Pos("charset=utf-8", rbstr)==0))
  134. // SetCodePage(rbstr, 949, false);
  135. //else
  136. //SetCodePage(rbstr, 65001, false);
  137. //String sResult = rbstr;
  138. }
  139. //---------------------------------------------------------------------------
  140. #if 0
  141. void TRestObjectManager::IdHTTPAuthorization(TObject *Sender, TIdAuthentication *Authentication, bool &Handled)
  142. {
  143. #if 0
  144. IdHTTP2->Request->Username = FStrmUser;
  145. IdHTTP2->Request->Password = FStrmPswd;
  146. #endif
  147. Authentication->Username = "";
  148. Authentication->Password = "";
  149. //TIdDigestAuthentication *pAuth1 = (TIdDigestAuthentication*)IdHTTP1->Request->Authentication;
  150. //TIdDigestAuthentication *pAuth2 = (TIdDigestAuthentication*)Authentication;
  151. //pAuth1->Uri = IdHTTP1->Request->URL;
  152. //pAuth2->Method = "GET";
  153. Handled = true;
  154. }
  155. //---------------------------------------------------------------------------
  156. #endif
  157. bool TRestObjectManager::RequestPost(String AApiUrl, String AJsonData, String &AResult)
  158. {
  159. bool result = true;
  160. TIdHTTP *IdHTTP1 = new TIdHTTP(NULL);
  161. TStringStream *request = new TStringStream(AJsonData, TEncoding::UTF8, false);
  162. TMemoryStream *response = new TMemoryStream();
  163. AResult = "";
  164. try {
  165. try {
  166. IdHTTP1->Request->Clear();
  167. //IdHTTP1->Request->BasicAuthentication = false;
  168. IdHTTP1->Request->ContentType = "application/json; charset=utf8";
  169. IdHTTP1->Request->Accept = "application/json; charset=utf8";
  170. IdHTTP1->Request->CharSet = "utf-8";
  171. //IdHTTP1->Request->ContentEncoding = "utf-8";
  172. IdHTTP1->ConnectTimeout = 5000;
  173. IdHTTP1->ReadTimeout = 20000;
  174. IdHTTP1->AllowCookies = false;
  175. //IdHTTP1->Request->CustomHeaders->Add('Authorization: Bearer ' + sToken);
  176. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
  177. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions << hoForceEncodeParams;
  178. request->Position = 0;
  179. IdHTTP1->Response->KeepAlive = false;
  180. IdHTTP1->Response->ContentType = "application/json; charset=utf8";
  181. IdHTTP1->Response->CharSet = "utf-8";
  182. //IdHTTP1->Response->ContentEncoding = "utf-8";
  183. IdHTTP1->Post(AApiUrl, request, response);
  184. IdHTTP1->Disconnect();
  185. IdHTTP1->IOHandler->InputBuffer->Clear();
  186. //TMcJsonItem *Json = new TMcJsonItem();
  187. //Json->LoadFromStream(response, true);
  188. } catch(EIdHTTPProtocolException &e1) {
  189. result = false;
  190. #if 0
  191. String sErrMsg = e1.ErrorMessage;
  192. TMcJsonItem *errJson = NULL;
  193. try {
  194. try {
  195. TMcJsonItem *errJson = new TMcJsonItem();
  196. errJson->AsJSON = e1.ErrorMessage;
  197. } catch(Exception &e) {
  198. }
  199. } __finally {
  200. if (errJson) delete errJson;
  201. }
  202. Application->MessageBox(e1.ErrorMessage.c_str(), L"작업 중 오류 발생.", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  203. TStringStream *errStream = new TStringStream(e1.ErrorMessage, TEncoding::UTF8, false);
  204. RawByteString rbstr = (char*)(AnsiString(e1.ErrorMessage).c_str());
  205. SetCodePage(rbstr, 949, false);
  206. String sResult = rbstr;
  207. Application->MessageBox(sResult.c_str(), L"작업 중 오류 발생.", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  208. #endif
  209. String errMsg;
  210. switch(e1.ErrorCode) {
  211. case 400:
  212. errMsg = "요청 데이터가 유효하지 않습니다.";
  213. break;
  214. case 404:
  215. errMsg = "데이터를 찾을 수 없습니다.";
  216. break;
  217. case 417:
  218. errMsg = "작업 중 오류가 발생 하였습니다.";
  219. break;
  220. default:
  221. errMsg = "작업 중 알 수 없는 오류가 발생 하였습니다.";
  222. break;
  223. }
  224. errMsg = e1.Message + "\r\n" + errMsg;
  225. Application->MessageBox(errMsg.c_str(), L"작업 중 오류 발생.", MB_OK|MB_ICONERROR|MB_APPLMODAL);
  226. } catch(Exception &e) {
  227. result = false;
  228. Application->ShowException(&e);
  229. }
  230. } __finally {
  231. if (IdHTTP1) delete IdHTTP1;
  232. if (request) delete request;
  233. if (response) delete response;
  234. }
  235. return result;
  236. }
  237. //---------------------------------------------------------------------------
  238. TMcJsonItem* TRestObjectManager::RequestGet(String AApiUrl)
  239. {
  240. TMcJsonItem *Json = NULL;
  241. TIdHTTP *IdHTTP1 = new TIdHTTP(NULL);
  242. TMemoryStream *stream = new TMemoryStream();
  243. try {
  244. try {
  245. IdHTTP1->Request->Clear();
  246. IdHTTP1->Request->BasicAuthentication = false;
  247. IdHTTP1->Request->ContentType = "application/json; charset=utf8";
  248. IdHTTP1->Request->Accept = "application/json; charset=utf8";
  249. IdHTTP1->Request->CharSet = "utf-8";
  250. //IdHTTP1->Request->ContentEncoding = "utf-8";
  251. IdHTTP1->ConnectTimeout = 5000;
  252. IdHTTP1->ReadTimeout = 20000;
  253. IdHTTP1->AllowCookies = false;
  254. IdHTTP1->HTTPOptions = IdHTTP1->HTTPOptions >> hoInProcessAuth;
  255. //IdHTTP1->IOHandler->DefStringEncoding = TEncoding::GetEncoding(949);
  256. //result = IdHTTP1->Get(AApiUrl);
  257. //return result;
  258. IdHTTP1->Response->KeepAlive = false;
  259. IdHTTP1->Get(AApiUrl, stream);
  260. stream->Position = 0;
  261. IdHTTP1->Disconnect();
  262. IdHTTP1->IOHandler->InputBuffer->Clear();
  263. Json = new TMcJsonItem();
  264. Json->LoadFromStream(stream, true);
  265. } catch(Exception &e) {
  266. }
  267. } __finally {
  268. if (IdHTTP1) delete IdHTTP1;
  269. if (stream) delete stream;
  270. }
  271. return Json;
  272. }
  273. //---------------------------------------------------------------------------
  274. TMcJsonItem* TRestObjectManager::ParseJsonString(String AJsonData)
  275. {
  276. String AData = AJsonData.Trim();
  277. TMcJsonItem *Json = new TMcJsonItem();
  278. try {
  279. Json->AsJSON = AData;
  280. } catch(Exception &e) {
  281. }
  282. return Json;
  283. }
  284. //---------------------------------------------------------------------------
  285. TMcJsonItem* TRestObjectManager::ParseJsonStream(TStream *AStream)
  286. {
  287. TMcJsonItem *Json = new TMcJsonItem();
  288. try {
  289. Json->LoadFromStream(AStream, true);
  290. } catch(Exception &e) {
  291. }
  292. return Json;
  293. }
  294. //---------------------------------------------------------------------------
  295. String TRestObjectManager::GetValue(TMcJsonItem *AItem, String AKey)
  296. {
  297. String result = "";
  298. if (AItem) {
  299. TMcJsonItem *value = AItem->Values[AKey];
  300. if (value) {
  301. result = value->AsString;
  302. if (result == "null") result = "";
  303. }
  304. }
  305. return result;
  306. }
  307. //---------------------------------------------------------------------------
  308. #if 0
  309. TJSONArray *jsonArr = NULL;
  310. try {
  311. reMsg->Lines->BeginUpdate();
  312. try {
  313. /*TBytes data;
  314. data.Length = AData.Length();
  315. ZeroMemory(&data[0], data.Length);
  316. CopyMemory(&data[0], AData.c_str(), data.Length);*/
  317. TStringStream *stream = new TStringStream(AData, TEncoding::UTF8);
  318. jsonArr = (TJSONArray*)TJSONObject::ParseJSONValue(TEncoding::UTF8->GetBytes(AData), 0);
  319. jsonArr = (TJSONArray*)TJSONObject::ParseJSONValue(TEncoding::UTF8->GetBytes(AData), 0);
  320. if (!jsonArr) {
  321. reMsg->Lines->Add("*******************************************: ");
  322. reMsg->Lines->Add("JSON Data Reading Failed: ");
  323. reMsg->Lines->Add("*******************************************: ");
  324. return;
  325. }
  326. reMsg->Lines->Add("Objects: " + String(jsonArr->Size()));
  327. reMsg->Lines->Add("*******************************************: ");
  328. cameraNmbr = "";
  329. cameraId = "";
  330. cameraNm = "";
  331. cameraIp = "";
  332. cameraStream = "";
  333. for (int ii = 0; ii < jsonArr->Size(); ii++) {
  334. TJSONObject *jo = (TJSONObject*)jsonArr->Get(ii);
  335. for (int jj = 0; jj < jo->Size(); jj++) {
  336. TJSONPair *obj = jo->Get(jj);
  337. if (obj->JsonString->Value() == CAMERA_NMBR) {
  338. cameraNmbr = obj->JsonValue->Value();
  339. }
  340. else if (obj->JsonString->Value() == CAMERA_ID) {
  341. cameraId = obj->JsonValue->Value();
  342. }
  343. else if (obj->JsonString->Value() == CAMERA_NM) {
  344. cameraNm = obj->JsonValue->Value();
  345. /*
  346. String sStrVal = obj->JsonValue->Value();
  347. reMsg->Lines->Add(TEncoding::Default->GetString(TEncoding::Default->GetBytes(sStrVal)));
  348. reMsg->Lines->Add(TEncoding::UTF8->GetString(TEncoding::UTF8->GetBytes(sStrVal)));
  349. reMsg->Lines->Add(TEncoding::UTF7->GetString(TEncoding::UTF7->GetBytes(sStrVal)));
  350. reMsg->Lines->Add(TEncoding::Unicode->GetString(TEncoding::Unicode->GetBytes(sStrVal)));
  351. reMsg->Lines->Add((TEncoding::UTF8->GetBytes(sStrVal)));
  352. reMsg->Lines->Add((TEncoding::UTF7->GetBytes(sStrVal)));
  353. reMsg->Lines->Add((TEncoding::Unicode->GetBytes(sStrVal)));
  354. */
  355. }
  356. else if (obj->JsonString->Value() == CAMERA_IP) {
  357. cameraIp = obj->JsonValue->Value();
  358. }
  359. else if (obj->JsonString->Value() == CAMERA_STREAM) {
  360. cameraStream = obj->JsonValue->Value();
  361. }
  362. }
  363. reMsg->Lines->Add(cameraNmbr + "," + cameraId + "," + cameraNm + "," + cameraIp + "," + cameraStream);
  364. ObjCtlrManager->SaveCameraInfo(ii+1, cameraNmbr, cameraId, cameraNm, cameraIp, cameraStream, "");
  365. }
  366. } catch(Exception &e) {
  367. }
  368. } __finally {
  369. if (jsonArr) jsonArr->Free();
  370. reMsg->Lines->EndUpdate();
  371. }
  372. #endif
  373. #if 0
  374. reMsg->Lines->BeginUpdate();
  375. AData = StringReplace(AData, "[", "", TReplaceFlags() << rfReplaceAll);
  376. AData = StringReplace(AData, "]", "", TReplaceFlags() << rfReplaceAll);
  377. AData = StringReplace(AData, "},", "}", TReplaceFlags() << rfReplaceAll);
  378. //AData = StringReplace(AData, "{", "", TReplaceFlags() << rfReplaceAll);
  379. TStringList *pStringList = new TStringList;
  380. try {
  381. pStringList->Delimiter = '}';
  382. pStringList->StrictDelimiter = true;
  383. pStringList->DelimitedText = AData;
  384. for (int ii = 0; ii < pStringList->Count; ii++) {
  385. //reMsg->Lines->Add("*******************************************: " + String(ii+1));
  386. //reMsg->Lines->Add(pStringList->Strings[ii]);
  387. }
  388. } __finally {
  389. if (pStringList) delete pStringList;
  390. }
  391. reMsg->Lines->EndUpdate();
  392. //return;
  393. #endif
  394. //String sFileName = "C:\\UTF8FileName.xml";
  395. //Memo1->Lines->LoadFromFile(sFileName, TEncoding::UTF8);
  396. //reMsg->Lines->Clear();
  397. //reMsg->Lines->Add(AData);
  398. //String((char *)pMemoryStream->Memory, pMemoryStream->Size);
  399. #include <OleAuto.h>
  400. char* UTF8ToANSI(const char *pszCode)
  401. {
  402. BSTR bstrWide;
  403. char* pszAnsi;
  404. int nLength;
  405. // Get nLength of the Wide Char buffer
  406. nLength = MultiByteToWideChar(CP_UTF8, 0, pszCode, strlen(pszCode) + 1,
  407. NULL, NULL);
  408. bstrWide = SysAllocStringLen(NULL, nLength);
  409. // Change UTF-8 to Unicode (UTF-16)
  410. MultiByteToWideChar(CP_UTF8, 0, pszCode, strlen(pszCode) + 1, bstrWide, nLength);
  411. // Get nLength of the multi byte buffer
  412. nLength = WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, NULL, 0, NULL, NULL);
  413. pszAnsi = new char[nLength];
  414. // Change from unicode to mult byte
  415. WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, pszAnsi, nLength, NULL, NULL);
  416. SysFreeString(bstrWide);
  417. return pszAnsi;
  418. }
  419. AnsiString __fastcall Utf8ToAscii(UTF8String AUtf8)
  420. {
  421. int nLen;
  422. WideString sUtf16;
  423. AnsiString sAscii = "";
  424. nLen = ::MultiByteToWideChar(CP_UTF8, 0, AUtf8.c_str(), AUtf8.Length(), NULL, 0);
  425. sUtf16.SetLength(nLen);
  426. ::MultiByteToWideChar(CP_UTF8, 0, AUtf8.c_str(), AUtf8.Length(), sUtf16.c_bstr(), nLen);
  427. nLen = ::WideCharToMultiByte(CP_ACP, 0, sUtf16.c_bstr(), sUtf16.Length(), NULL, 0, NULL, NULL);
  428. sAscii.SetLength(nLen);
  429. ::WideCharToMultiByte(CP_ACP, 0, sUtf16.c_bstr(), sUtf16.Length(), sAscii.c_str(), nLen, NULL, NULL);
  430. return sAscii;
  431. }
  432. //---------------------------------------------------------------------------
  433. #if 0
  434. TJSONArray *jsonArr = NULL;
  435. try {
  436. reMsg->Lines->BeginUpdate();
  437. try {
  438. //TStringStream *stream = new TStringStream(AData, TEncoding::UTF8);
  439. //jsonArr = (TJSONArray*)TJSONObject::ParseJSONValue(TEncoding::UTF8->GetBytes(AnsiString(AData)), 0);
  440. jsonArr = (TJSONArray*)TJSONObject::ParseJSONValue(BytesOf(AData), 0);
  441. //jsonArr = (TJSONArray*)TJSONObject::ParseJSONValue(stream->DataString, 0);
  442. if (!jsonArr) {
  443. reMsg->Lines->Add("*******************************************: ");
  444. reMsg->Lines->Add("JSON Data Reading Failed: ");
  445. reMsg->Lines->Add("*******************************************: ");
  446. return;
  447. }
  448. reMsg->Lines->Add("Objects: " + String(jsonArr->Size()));
  449. reMsg->Lines->Add("*******************************************: ");
  450. cameraNmbr = "";
  451. cameraId = "";
  452. cameraNm = "";
  453. cameraIp = "";
  454. cameraStream = "";
  455. for (int ii = 0; ii < jsonArr->Size(); ii++) {
  456. TJSONObject *jo = (TJSONObject*)jsonArr->Get(ii);
  457. for (int jj = 0; jj < jo->Size(); jj++) {
  458. TJSONPair *obj = jo->Get(jj);
  459. if (obj->JsonString->Value() == CAMERA_NMBR) {
  460. cameraNmbr = obj->JsonValue->Value();
  461. }
  462. else if (obj->JsonString->Value() == CAMERA_ID) {
  463. cameraId = obj->JsonValue->Value();
  464. }
  465. else if (obj->JsonString->Value() == CAMERA_NM) {
  466. cameraNm = obj->JsonValue->Value();
  467. //RawByteString rbstr = (char*)(AnsiString(cameraNm).c_str());
  468. //SetCodePage(rbstr, 949, false);
  469. //cameraNm = rbstr;
  470. //cameraNm= String(UTF8ToANSI(AnsiString(cameraNm).c_str()));
  471. reMsg->Lines->Add(cameraNm);
  472. cameraNm = (UTF8String)(obj->JsonValue->Value()).c_str();
  473. /*
  474. String sStrVal = obj->JsonValue->Value();
  475. reMsg->Lines->Add(TEncoding::Default->GetString(TEncoding::Default->GetBytes(sStrVal)));
  476. reMsg->Lines->Add(TEncoding::UTF8->GetString(TEncoding::UTF8->GetBytes(sStrVal)));
  477. reMsg->Lines->Add(TEncoding::UTF7->GetString(TEncoding::UTF7->GetBytes(sStrVal)));
  478. reMsg->Lines->Add(TEncoding::Unicode->GetString(TEncoding::Unicode->GetBytes(sStrVal)));
  479. reMsg->Lines->Add((TEncoding::UTF8->GetBytes(sStrVal)));
  480. reMsg->Lines->Add((TEncoding::UTF7->GetBytes(sStrVal)));
  481. reMsg->Lines->Add((TEncoding::Unicode->GetBytes(sStrVal)));
  482. */
  483. }
  484. else if (obj->JsonString->Value() == CAMERA_IP) {
  485. cameraIp = obj->JsonValue->Value();
  486. }
  487. else if (obj->JsonString->Value() == CAMERA_STREAM) {
  488. cameraStream = obj->JsonValue->Value();
  489. }
  490. }
  491. reMsg->Lines->Add(cameraNmbr + "," + cameraId + "," + cameraNm + "," + cameraIp + "," + cameraStream);
  492. ObjCtlrManager->SaveCameraInfo(ii+1, cameraNmbr, cameraId, cameraNm, cameraIp, cameraStream, "");
  493. }
  494. } catch(Exception &e) {
  495. }
  496. } __finally {
  497. if (jsonArr) jsonArr->Free();
  498. reMsg->Lines->EndUpdate();
  499. }
  500. #endif