rosdk.pas 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. {
  2. This file is part of the Free Pascal run time library.
  3. Copyright (c) 2018 by Michael Van Canneyt, member of the
  4. Free Pascal development team
  5. Remobjects SDK external classes definitions
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. unit ROSDK;
  13. {$mode objfpc}
  14. {$modeswitch externalclass}
  15. interface
  16. uses
  17. Types, JS;
  18. Type
  19. TROValue = record
  20. dataType : string;
  21. value : JSValue;
  22. end;
  23. TROComplexType = class;
  24. TROEnumType = class;
  25. TROStructType = class;
  26. TROArrayType = class;
  27. TROException = class;
  28. TROEventSink = class;
  29. TROClientChannel = class;
  30. TROHTTPClientChannel = class;
  31. TROMessage = class;
  32. TROJSONMessage = class;
  33. TROBinMessage = class;
  34. TROBinHeader = class;
  35. TRORemoteService = class;
  36. TROService = class;
  37. TROEventReceiver = class;
  38. TROUtil = class external name 'RemObjects.UTIL' (TJSObject)
  39. Public
  40. class function toBase64 (Const aValue : String) : String;
  41. class function fromBase64 (Const aValue : String) : String;
  42. class procedure showMessage (Const msg : string);
  43. class procedure showError(Const msg : string; e : JSValue);
  44. class function toJSON(aValue : jsValue) : String;
  45. class function parseJSON (Const aValue : string) : JSValue;
  46. class function NewGuid() : string;
  47. class function GuidToArray(Const aGuid : string) : TIntegerDynArray;
  48. class function guidToByteArray(Const aGuid : string): String;
  49. class function zeroPad(const num : string; count : integer) : String;
  50. class function byteArrayToGuid(const byteArray : string) : String;
  51. class function strToByteArray (const str : string) : string;
  52. class function byteArrayToStr(const byteArray : string) : string;
  53. class function byteArrayToUtf16(const byteArray : string) : string;
  54. class function utf16ToByteArray(const str : string) : string;
  55. class function ISO8601toDateTime(const str: String) : TJSDate;
  56. class function dateTimeToSOAPString(aValue: TJSDate) : string;
  57. class function decimalToString(aDecimal : array of integer ) : string;
  58. class function stringToDecimal(const aString : String) : TIntegerDynArray;
  59. class Function checkArgumentTypes (args : Array of JSValue; types : array of string) : Boolean;
  60. end;
  61. TROException = class external name 'RemObjects.SDK.ROException' (TJSError);
  62. TROComplexType = class external name 'RemObjects.SDK.ROComplexType' (TJSObject)
  63. Public
  64. Procedure readFrom(aMessage : TROMessage);
  65. Procedure writeTo(aMessage : TROMessage);
  66. end;
  67. { TROEnumType }
  68. TROEnumType = class external name 'RemObjects.SDK.ROEnumType' (TROComplexType)
  69. private
  70. FEnumValues: TStringDynArray;
  71. Public
  72. value : string;
  73. Procedure fromObject(aObject : TJSObject); overload;
  74. Function toObject(aStoreType : Boolean) : TJSObject;overload;
  75. property enumValues : TStringDynArray read FEnumValues;
  76. end;
  77. TROStructType = class external name 'RemObjects.SDK.ROStructType' (TROComplexType)
  78. Public
  79. Procedure fromObject(aObject : TJSObject);overload;
  80. Function toObject(aStoreType : Boolean) : TJSObject;overload;
  81. end;
  82. TROArrayType = class external name 'RemObjects.SDK.ROArrayType' (TROComplexType)
  83. Public
  84. Procedure fromObject(aObject : Array of TJSObject);overload;
  85. Function toObject(aStoreType : Boolean) : TJSObjectDynArray;overload;
  86. end;
  87. TRODispatchSuccessEvent = reference to Procedure (msg : TROMessage);
  88. TRODispatchFailedEvent = reference to Procedure (msg : TROMessage; aError : TJSError);
  89. TROCallBack = Procedure;
  90. TROOnLoginNeeded = reference to procedure(aCallBack : TROCallBack);
  91. TROClientChannel = class external name 'RemObjects.SDK.ClientChannel' (TJSObject)
  92. Public
  93. onLoginNeeded : TROOnLoginNeeded;
  94. Public
  95. Constructor new(aURL : String);
  96. Procedure dispatch(aMessage : TROMessage; onSuccess : TRODispatchSuccessEvent; OnError : TRODispatchFailedEvent);
  97. end;
  98. TROHTTPCallback = reference to procedure (aResponse : String; aStatus : Integer);
  99. TROHTTPClientChannel = class external name 'RemObjects.SDK.HTTPClientChannel' (TROClientChannel)
  100. Public
  101. Procedure post(aMessage : TROMessage; isBinary : Boolean; OnSuccess,OnError : TROHTTPCallback);
  102. end;
  103. TROEventSink = class external name 'RemObjects.SDK.ROEventSink' (TJSObject)
  104. Public
  105. Procedure readEvent(aMessage : TROMessage; aName : string);
  106. end;
  107. TROMessage = class external name 'RemObjects.SDK.Message' (TJSObject)
  108. Public
  109. constructor new;
  110. Function Clone : TROMessage;
  111. function getClientID : String;
  112. procedure setClientID(const aValue : String);
  113. function getErrorMessage : String;
  114. procedure setErrorResponse (Const aResponse : String);
  115. Procedure initialize (Const aServiceName,aMethodName : string; aMessageType : Integer);
  116. Procedure finalize;
  117. function requestStream : String; // Dummy
  118. procedure setResponseStream(const aValue : String);
  119. function read (const aName,aType : String) : TROValue;
  120. Procedure write (const aName,aType : String; aValue : JSValue);
  121. Property ClientID : String Read getClientID Write setClientID;
  122. Property ErrorMessage : String Read getErrorMessage;
  123. end;
  124. TROJSONMessage = class external name 'RemObjects.SDK.JSONMessage' (TROMessage)
  125. end;
  126. TROBinHeader = class external name 'RemObjects.SDK.BinHeader' (TJSObject)
  127. Public
  128. function asStream: String;
  129. Procedure ReadFrom(aStream : String);
  130. function isValidHeader : Boolean;
  131. function getCompressed : Boolean;
  132. Procedure setCompressed(aValue : Boolean);
  133. function getMessageType : integer;
  134. Procedure setMessageType(aValue : integer);
  135. procedure setClientID(aValue : String);
  136. Property Compressed : Boolean Read getCompressed Write setCompressed;
  137. Property MessageType : Integer Read getMessageType write SetMessageType;
  138. end;
  139. TROBinMessage = class external name 'RemObjects.SDK.BinMessage' (TROMessage)
  140. public
  141. constructor new;
  142. Procedure writeVariant(aValue : JSValue);
  143. Procedure writeinteger(aValue : Integer);
  144. Procedure writeStrWithLength(aValue : string);
  145. function readByte : Byte;
  146. function readCompressed : String;
  147. function readVariant : JSValue;
  148. end;
  149. TROEventCallback = reference to procedure (event : TJSObject); // Or TROComplexType ?
  150. TROEventReceiver = class external name 'RemObjects.SDK.ROEventReceiver' (TJSObject)
  151. Public
  152. Constructor new(aChannel : TROClientChannel; aMessage : TROMessage; aServiceName : string; aTimeOut : Integer);
  153. Procedure addHandler(anEventName : String; aCallback : TROEventCallback);
  154. Procedure setActive(aValue : boolean);
  155. function getActive : Boolean;
  156. function getTimeout : integer;
  157. procedure setTimeout(aValue : Integer);
  158. Procedure intPollServer;
  159. Property Active : Boolean Read GetActive Write SetActive;
  160. Property TimeOut : Integer read GetTimeOut Write SetTimeout;
  161. end;
  162. TRORemoteService = Class external name 'RemObjects.SDK.RemoteService' (TJSObject)
  163. Constructor new(aChannel : TROClientChannel; aMessage : TROMessage; aServiceName : string);
  164. end;
  165. TROService = Class external name 'RemObjects.SDK.ROService' (TJSObject)
  166. Public
  167. Constructor new(aService : TRORemoteService);
  168. Constructor new(aChannel : TROClientChannel; aMessage : TROMessage; aServiceName : string);
  169. function getMessage : TROMessage;
  170. function getChannel : TROClientChannel;
  171. function getServiceName : String;
  172. Property Message : TROMessage Read getMessage;
  173. Property Channel : TROClientChannel Read getChannel;
  174. Property ServiceName : String Read getServiceName;
  175. end;
  176. TROBinaryParser = Class external name 'BinaryParser' (TJSObject)
  177. procedure warn;
  178. function decodeFloat(data : JSValue; precisionbits,exponentbits :Integer) : double;
  179. function encodeFloat(value: double; precisionbits,exponentbits :Integer) : string;
  180. function decodeInt(data : JSValue; bits : Integer; Signed : boolean) : NativeInt;
  181. function encodeInt(data : NativeInt; bits : Integer; Signed : boolean) : String;
  182. end;
  183. Function ExtractErrorMsg(jsError : TJSError) : String;
  184. implementation
  185. Function ExtractErrorMsg(jsError : TJSError) : String;
  186. begin
  187. if Assigned(jsError) and isString(jsError.message) then
  188. Result:=jsError.message
  189. else
  190. Result:='Unknown error'
  191. end;
  192. end.