lightstreamer-client-lib 2.2.2__tar.gz → 2.2.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (16) hide show
  1. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/PKG-INFO +6 -6
  2. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/README.md +5 -5
  3. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/pyproject.toml +1 -1
  4. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/src/lightstreamer/client/com_lightstreamer_net.py +3 -3
  5. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/src/lightstreamer/client/ls_python_client_api.py +2 -0
  6. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/src/lightstreamer/client/ls_python_client_haxe.py +310 -25
  7. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/src/lightstreamer/client/ls_python_client_wrapper.py +2 -0
  8. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/src/lightstreamer_client_lib.egg-info/PKG-INFO +6 -6
  9. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/LICENSE +0 -0
  10. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/setup.cfg +0 -0
  11. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/setup.py +0 -0
  12. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/src/lightstreamer/client/__init__.py +0 -0
  13. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/src/lightstreamer_client_lib.egg-info/SOURCES.txt +0 -0
  14. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/src/lightstreamer_client_lib.egg-info/dependency_links.txt +0 -0
  15. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/src/lightstreamer_client_lib.egg-info/requires.txt +0 -0
  16. {lightstreamer_client_lib-2.2.2 → lightstreamer_client_lib-2.2.3}/src/lightstreamer_client_lib.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lightstreamer-client-lib
3
- Version: 2.2.2
3
+ Version: 2.2.3
4
4
  Summary: Lightstreamer Client SDK
5
5
  Author-email: Lightstreamer Srl <support@lightstreamer.com>
6
6
  License: Apache-2.0
@@ -35,7 +35,7 @@ The sdk is supported on Python 3.7 and above.
35
35
 
36
36
  ## Quickstart
37
37
 
38
- To connect to a Lightstreamer Server, a [LightstreamerClient](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.LightstreamerClient) object has to be created, configured, and instructed to connect to the Lightstreamer Server.
38
+ To connect to a Lightstreamer Server, a [LightstreamerClient](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.LightstreamerClient) object has to be created, configured, and instructed to connect to the Lightstreamer Server.
39
39
  A minimal version of the code that creates a LightstreamerClient and connects to the Lightstreamer Server on *https://push.lightstreamer.com* will look like this:
40
40
 
41
41
  ```python
@@ -45,7 +45,7 @@ client = LightstreamerClient("http://push.lightstreamer.com/","DEMO")
45
45
  client.connect()
46
46
  ```
47
47
 
48
- For each subscription to be subscribed to a Lightstreamer Server a [Subscription](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.Subscription) instance is needed.
48
+ For each subscription to be subscribed to a Lightstreamer Server a [Subscription](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.Subscription) instance is needed.
49
49
  A simple Subscription containing three items and two fields to be subscribed in *MERGE* mode is easily created (see [Lightstreamer General Concepts](https://lightstreamer.com/docs/ls-server/latest/General%20Concepts.pdf)):
50
50
 
51
51
  ```python
@@ -55,7 +55,7 @@ sub.setRequestedSnapshot("yes")
55
55
  client.subscribe(sub)
56
56
  ```
57
57
 
58
- Before sending the subscription to the server, usually at least one [SubscriptionListener](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_api.SubscriptionListener) is attached to the Subscription instance in order to consume the real-time updates. The following code shows the values of the fields *stock_name* and *last_price* each time a new update is received for the subscription:
58
+ Before sending the subscription to the server, usually at least one [SubscriptionListener](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_api.SubscriptionListener) is attached to the Subscription instance in order to consume the real-time updates. The following code shows the values of the fields *stock_name* and *last_price* each time a new update is received for the subscription:
59
59
 
60
60
  ```python
61
61
  class SubListener(SubscriptionListener):
@@ -89,7 +89,7 @@ client.connect()
89
89
 
90
90
  ## Logging
91
91
 
92
- To enable the internal client logger, create a [LoggerProvider](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_api.LoggerProvider) and set it as the default provider of [LightstreamerClient](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.LightstreamerClient.setLoggerProvider).
92
+ To enable the internal client logger, create a [LoggerProvider](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_api.LoggerProvider) and set it as the default provider of [LightstreamerClient](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.LightstreamerClient.setLoggerProvider).
93
93
 
94
94
  ```python
95
95
  import sys, logging
@@ -108,7 +108,7 @@ Compatible with Lightstreamer Server since version 7.4.0.
108
108
 
109
109
  - [Live demos](https://demos.lightstreamer.com/?p=lightstreamer&t=client&lclient=python)
110
110
 
111
- - [API Reference](https://lightstreamer.com/api/ls-python-client/2.2.2/index.html)
111
+ - [API Reference](https://lightstreamer.com/api/ls-python-client/2.2.3/index.html)
112
112
 
113
113
  ## Support
114
114
 
@@ -16,7 +16,7 @@ The sdk is supported on Python 3.7 and above.
16
16
 
17
17
  ## Quickstart
18
18
 
19
- To connect to a Lightstreamer Server, a [LightstreamerClient](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.LightstreamerClient) object has to be created, configured, and instructed to connect to the Lightstreamer Server.
19
+ To connect to a Lightstreamer Server, a [LightstreamerClient](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.LightstreamerClient) object has to be created, configured, and instructed to connect to the Lightstreamer Server.
20
20
  A minimal version of the code that creates a LightstreamerClient and connects to the Lightstreamer Server on *https://push.lightstreamer.com* will look like this:
21
21
 
22
22
  ```python
@@ -26,7 +26,7 @@ client = LightstreamerClient("http://push.lightstreamer.com/","DEMO")
26
26
  client.connect()
27
27
  ```
28
28
 
29
- For each subscription to be subscribed to a Lightstreamer Server a [Subscription](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.Subscription) instance is needed.
29
+ For each subscription to be subscribed to a Lightstreamer Server a [Subscription](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.Subscription) instance is needed.
30
30
  A simple Subscription containing three items and two fields to be subscribed in *MERGE* mode is easily created (see [Lightstreamer General Concepts](https://lightstreamer.com/docs/ls-server/latest/General%20Concepts.pdf)):
31
31
 
32
32
  ```python
@@ -36,7 +36,7 @@ sub.setRequestedSnapshot("yes")
36
36
  client.subscribe(sub)
37
37
  ```
38
38
 
39
- Before sending the subscription to the server, usually at least one [SubscriptionListener](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_api.SubscriptionListener) is attached to the Subscription instance in order to consume the real-time updates. The following code shows the values of the fields *stock_name* and *last_price* each time a new update is received for the subscription:
39
+ Before sending the subscription to the server, usually at least one [SubscriptionListener](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_api.SubscriptionListener) is attached to the Subscription instance in order to consume the real-time updates. The following code shows the values of the fields *stock_name* and *last_price* each time a new update is received for the subscription:
40
40
 
41
41
  ```python
42
42
  class SubListener(SubscriptionListener):
@@ -70,7 +70,7 @@ client.connect()
70
70
 
71
71
  ## Logging
72
72
 
73
- To enable the internal client logger, create a [LoggerProvider](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_api.LoggerProvider) and set it as the default provider of [LightstreamerClient](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.LightstreamerClient.setLoggerProvider).
73
+ To enable the internal client logger, create a [LoggerProvider](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_api.LoggerProvider) and set it as the default provider of [LightstreamerClient](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.LightstreamerClient.setLoggerProvider).
74
74
 
75
75
  ```python
76
76
  import sys, logging
@@ -89,7 +89,7 @@ Compatible with Lightstreamer Server since version 7.4.0.
89
89
 
90
90
  - [Live demos](https://demos.lightstreamer.com/?p=lightstreamer&t=client&lclient=python)
91
91
 
92
- - [API Reference](https://lightstreamer.com/api/ls-python-client/2.2.2/index.html)
92
+ - [API Reference](https://lightstreamer.com/api/ls-python-client/2.2.3/index.html)
93
93
 
94
94
  ## Support
95
95
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "lightstreamer-client-lib"
7
- version = "2.2.2"
7
+ version = "2.2.3"
8
8
  description = "Lightstreamer Client SDK"
9
9
  readme = "README.md"
10
10
  authors = [{ name = "Lightstreamer Srl", email = "support@lightstreamer.com" }]
@@ -94,7 +94,7 @@ class HttpClientPy:
94
94
  proxy_url, proxy_auth = build_proxy(proxy)
95
95
  try:
96
96
  session = SessionPy.getInstance()
97
- async with session.request("POST", url, data=body, headers=headers, proxy=proxy_url, proxy_auth=proxy_auth, ssl=sslContext) as resp:
97
+ async with session.request("POST", url, data=body, headers=headers, proxy=proxy_url, proxy_auth=proxy_auth, ssl=(True if sslContext is None else sslContext)) as resp:
98
98
  self.cancellationToken.set_result(resp)
99
99
  if not resp.ok:
100
100
  raise Exception("Unexpected HTTP code: " + str(resp.status))
@@ -141,7 +141,7 @@ class WsClientPy:
141
141
  proxy_url, proxy_auth = build_proxy(proxy)
142
142
  try:
143
143
  session = SessionPy.getInstance()
144
- async with session.ws_connect(url, protocols=(protocol,), headers=headers, proxy=proxy_url, proxy_auth=proxy_auth, ssl=sslContext) as ws:
144
+ async with session.ws_connect(url, protocols=(protocol,), headers=headers, proxy=proxy_url, proxy_auth=proxy_auth, ssl=(True if sslContext is None else sslContext)) as ws:
145
145
  self.cancellationToken.set_result(ws)
146
146
  self.ws = ws
147
147
  self.on_open(self)
@@ -166,7 +166,7 @@ class WsClientPy:
166
166
  resp = self.cancellationToken.result()
167
167
  ls_io_thread.submit_coro(resp.close())
168
168
  else:
169
- async def on_done_callback(future):
169
+ def on_done_callback(future):
170
170
  resp = future.result()
171
171
  ls_io_thread.submit_coro(resp.close())
172
172
  self.cancellationToken.add_done_callback(on_done_callback)
@@ -198,6 +198,8 @@ class ClientMessageListener:
198
198
 
199
199
  :param originalMessage: the message to which this notification is related.
200
200
  :param sentOnNetwork: true if the message was sent on the network, false otherwise. Even if the flag is true, it is not possible to infer whether the message actually reached the Lightstreamer Server or not.
201
+
202
+ .. seealso:: `Client-to-Server Messaging in Lightstreamer Explained — Aborted messages <https://lightstreamer.com/blog/client-to-server-messaging-in-lightstreamer-explained/#Aborted_messages>`_
201
203
  """
202
204
  pass
203
205
 
@@ -1,4 +1,4 @@
1
- # Generated by Haxe 4.3.4
1
+ # Generated by Haxe 4.3.7
2
2
  # coding: utf-8
3
3
  import sys
4
4
 
@@ -521,9 +521,9 @@ Type._hx_class = Type
521
521
  class LSConnectionDetails:
522
522
  _hx_class_name = "LSConnectionDetails"
523
523
  _hx_is_interface = "False"
524
- __slots__ = ("serverAddress", "adapterSet", "user", "password", "sessionId", "serverInstanceAddress", "serverSocketName", "clientIp", "client", "lock")
525
- _hx_fields = ["serverAddress", "adapterSet", "user", "password", "sessionId", "serverInstanceAddress", "serverSocketName", "clientIp", "client", "lock"]
526
- _hx_methods = ["getServerAddress", "setServerAddress", "getAdapterSet", "setAdapterSet", "getUser", "setUser", "setPassword", "getSessionId", "setSessionId", "getServerInstanceAddress", "setServerInstanceAddress", "getServerSocketName", "setServerSocketName", "getClientIp", "setClientIp", "toString"]
524
+ __slots__ = ("serverAddress", "adapterSet", "user", "password", "sessionId", "serverInstanceAddress", "serverSocketName", "clientIp", "certificatePins", "client", "lock")
525
+ _hx_fields = ["serverAddress", "adapterSet", "user", "password", "sessionId", "serverInstanceAddress", "serverSocketName", "clientIp", "certificatePins", "client", "lock"]
526
+ _hx_methods = ["getServerAddress", "setServerAddress", "arrayEqual", "getCertificatePins_Native", "setCertificatePins_Native", "getCertificatePins", "setCertificatePins", "getAdapterSet", "setAdapterSet", "getUser", "setUser", "setPassword", "getSessionId", "setSessionId", "getServerInstanceAddress", "setServerInstanceAddress", "getServerSocketName", "setServerSocketName", "getClientIp", "setClientIp", "toString"]
527
527
 
528
528
  def __init__(self,client):
529
529
  self.clientIp = None
@@ -533,6 +533,7 @@ class LSConnectionDetails:
533
533
  self.password = None
534
534
  self.user = None
535
535
  self.adapterSet = None
536
+ self.certificatePins = []
536
537
  self.serverAddress = com_lightstreamer_client__ConnectionDetails_ConnectionDetails_Fields_.DEFAULT_SERVER
537
538
  self.client = client
538
539
  self.lock = client.lock
@@ -560,6 +561,69 @@ class LSConnectionDetails:
560
561
  _gthis.client.machine.evtServerAddressChanged()
561
562
  self.lock.synchronized(_hx_local_0)
562
563
 
564
+ def arrayEqual(self,a,b):
565
+ if (len(a) != len(b)):
566
+ return False
567
+ _g = 0
568
+ _g1 = len(a)
569
+ while (_g < _g1):
570
+ i = _g
571
+ _g = (_g + 1)
572
+ if ((a[i] if i >= 0 and i < len(a) else None) != (b[i] if i >= 0 and i < len(b) else None)):
573
+ return False
574
+ return True
575
+
576
+ def getCertificatePins_Native(self):
577
+ _gthis = self
578
+ def _hx_local_1():
579
+ def _hx_local_0():
580
+ return list(_gthis.getCertificatePins())
581
+ return self.lock.synchronized(_hx_local_0)
582
+ return _hx_local_1()
583
+
584
+ def setCertificatePins_Native(self,pins):
585
+ _gthis = self
586
+ def _hx_local_0():
587
+ if (pins is None):
588
+ raise com_lightstreamer_internal_IllegalArgumentException("Pins list cannot be null")
589
+ _gthis.setCertificatePins(list(pins))
590
+ self.lock.synchronized(_hx_local_0)
591
+
592
+ def getCertificatePins(self):
593
+ _gthis = self
594
+ def _hx_local_1():
595
+ def _hx_local_0():
596
+ return list(_gthis.certificatePins)
597
+ return self.lock.synchronized(_hx_local_0)
598
+ return _hx_local_1()
599
+
600
+ def setCertificatePins(self,pins):
601
+ _gthis = self
602
+ def _hx_local_1():
603
+ if _gthis.arrayEqual(pins,_gthis.certificatePins):
604
+ return
605
+ _g = 0
606
+ while (_g < len(pins)):
607
+ pin = (pins[_g] if _g >= 0 and _g < len(pins) else None)
608
+ _g = (_g + 1)
609
+ if pin.startswith("sha1/"):
610
+ try:
611
+ haxe_crypto_Base64.decode(HxString.substring(pin,len("sha1/"),None))
612
+ except BaseException as _g1:
613
+ raise com_lightstreamer_internal_IllegalArgumentException(("Invalid pin hash: " + ("null" if pin is None else pin)))
614
+ elif pin.startswith("sha256/"):
615
+ try:
616
+ haxe_crypto_Base64.decode(HxString.substring(pin,len("sha256/"),None))
617
+ except BaseException as _g2:
618
+ raise com_lightstreamer_internal_IllegalArgumentException(("Invalid pin hash: " + ("null" if pin is None else pin)))
619
+ else:
620
+ raise com_lightstreamer_internal_IllegalArgumentException(("Pins must start with \"sha256/\" or \"sha1/\": " + ("null" if pin is None else pin)))
621
+ if com_lightstreamer_log__LoggerTools_LoggerTools_Fields_.actionLogger.isInfoEnabled():
622
+ com_lightstreamer_log__LoggerTools_LoggerTools_Fields_.actionLogger.info(("certificatePins changed: " + Std.string(pins)))
623
+ _gthis.certificatePins = list(pins)
624
+ _gthis.client.eventDispatcher.onPropertyChange("certificatePins")
625
+ self.lock.synchronized(_hx_local_1)
626
+
563
627
  def getAdapterSet(self):
564
628
  _gthis = self
565
629
  def _hx_local_1():
@@ -2442,7 +2506,7 @@ class com_lightstreamer_client_internal_ClientMachine:
2442
2506
  _hx_is_interface = "False"
2443
2507
  __slots__ = ("client", "details", "options", "lock", "clientEventDispatcher", "state", "wsFactory", "httpFactory", "ctrlFactory", "timerFactory", "randomGenerator", "delayCounter", "m_status", "m_nextReqId", "m_nextSubId", "defaultServerAddress", "requestLimit", "keepaliveInterval", "idleTimeout", "sessionId", "serverInstanceAddress", "lastKnownClientIp", "cause", "connectTs", "recoverTs", "ctrl_connectTs", "suspendedTransports", "disabledTransports", "sequenceMap", "messageManagers", "subscriptionManagers", "switchRequest", "constrainRequest", "swt_lastReqId", "rhb_grantedInterval", "rhb_currentInterval", "bw_requestedMaxBandwidth", "bw_lastReqId", "reachabilityFactory", "nr_reachabilityManager", "frz_pageLifecycleFactory", "frz_pageLifecycle", "rec_serverProg", "rec_clientProg", "slw_refTime", "slw_avgDelayMs", "slw_maxAvgDelayMs", "slw_hugeDelayMs", "slw_m", "ws", "http", "ctrl_http", "transportTimer", "retryTimer", "keepaliveTimer", "stalledTimer", "reconnectTimer", "rhbTimer", "recoveryTimer", "idleTimer", "pollingTimer", "ctrlTimer")
2444
2508
  _hx_fields = ["client", "details", "options", "lock", "clientEventDispatcher", "state", "wsFactory", "httpFactory", "ctrlFactory", "timerFactory", "randomGenerator", "delayCounter", "m_status", "m_nextReqId", "m_nextSubId", "defaultServerAddress", "requestLimit", "keepaliveInterval", "idleTimeout", "sessionId", "serverInstanceAddress", "lastKnownClientIp", "cause", "connectTs", "recoverTs", "ctrl_connectTs", "suspendedTransports", "disabledTransports", "sequenceMap", "messageManagers", "subscriptionManagers", "switchRequest", "constrainRequest", "swt_lastReqId", "rhb_grantedInterval", "rhb_currentInterval", "bw_requestedMaxBandwidth", "bw_lastReqId", "reachabilityFactory", "nr_reachabilityManager", "frz_pageLifecycleFactory", "frz_pageLifecycle", "rec_serverProg", "rec_clientProg", "slw_refTime", "slw_avgDelayMs", "slw_maxAvgDelayMs", "slw_hugeDelayMs", "slw_m", "ws", "http", "ctrl_http", "transportTimer", "retryTimer", "keepaliveTimer", "stalledTimer", "reconnectTimer", "rhbTimer", "recoveryTimer", "idleTimer", "pollingTimer", "ctrlTimer"]
2445
- _hx_methods = ["disposeSession", "disposeClient", "evtExtConnect", "evtExtConnect_NextRegion", "evtExtConnect_NetworkReachabilityRegion", "doInstallPageLifecycle", "doUnistallPageLifecycle", "evtPageFrozen", "evtPageResumed", "evtNetworkNotReachable", "evtNetworkReachable", "evtOnlineAgain", "evtServerAddressChanged", "evtExtDisconnect", "evtSelectCreate", "evtWSOpen", "evtMessage", "evtCtrlMessage", "evtTransportTimeout", "evtTransportError", "evtIdleTimeout", "evtPollingTimeout", "evtKeepaliveTimeout", "evtStalledTimeout", "evtReconnectTimeout", "evtRestartKeepalive", "evtWSOK", "evtCONERR", "evtEND", "evtERROR", "evtREQOK_withoutReqId", "evtREQOK", "evtREQOK_Forward", "evtREQOK_TransportRegion", "evtREQERR", "evtREQERR_Forward", "evtREQERR_TransportRegion", "evtPROG", "evtLOOP", "evtCONOK", "evtSERVNAME", "evtCLIENTIP", "evtCONS", "evtPROBE", "evtNOOP", "evtSYNC", "evtSYNC_PushingRegion", "evtMSGDONE", "evtMSGFAIL", "evtU", "evtSUBOK", "evtSUBCMD", "evtUNSUB", "evtEOS", "evtCS", "evtOV", "evtCONF", "evtCheckAvg", "evtSendPendingControls", "evtSendPendingMessages", "evtSelectRhb", "evtExtSetReverseHeartbeatInterval", "evtRestartHeartbeat", "evtRhbTimeout", "evtDisposeCtrl", "evtStartRecovery", "evtRecoveryTimeout", "evtCheckRecoveryTimeout", "evtCreate", "evtCheckTransport", "evtCheckBW", "evtCheckCtrlRequests", "evtCtrlDone", "evtCtrlError", "evtCtrlTimeout", "evtSendControl", "evtSendHeartbeat", "evtStartSession", "evtEndSession", "evtRetry", "evtRetry_NextRegion", "evtTerminate", "evtTerminate_NextRegion", "evtTerminate_NetworkReachabilityRegion", "evtRetryTimeout", "evtExtSetForcedTransport", "evtExtSetRequestedMaxBandwidth", "evtForceSlowing", "evtForcePolling", "evtSendMessage", "evtSwitchTransport", "evtSwitchTransport_forwardToTransportRegion", "onFreshData", "onStaleData", "isFreshData", "openWS", "openWS_Create", "openWS_Bind", "sendCreateWS", "sendBindWS_Streaming", "sendBindWS_FirstPolling", "sendBindWS_Polling", "sendDestroyWS", "sendHttpRequest", "sendCreateHTTP", "sendBindHTTP_Streaming", "sendBindHTTP_Polling", "sendCreateTTL", "sendRecovery", "disposeWS", "closeWS", "suspendWS_Streaming", "disableWS", "disableHTTP_Streaming", "disableStreaming", "enableAllTransports", "disposeHTTP", "closeHTTP", "disposeCtrl", "closeCtrl", "notifyStatus", "getBestForCreating", "getBestForBinding", "resetCurrentRetryDelay", "notifyServerErrorIfCauseIsError", "notifyServerError_CONERR", "notifyServerError_END", "notifyServerError_ERROR", "notifyServerError_REQERR", "doCONOK", "doCONOK_CreateWS", "doCONOK_BindWS_Streaming", "doCONOK_BindWS_Polling", "doCONOK_CreateHTTP", "doCONOK_BindHTTP_Streaming", "doCONOK_BindHTTP_Polling", "doSERVNAME", "doCLIENTIP", "doCONS", "doLOOP", "doPROG", "doMSGDONE", "doMSGFAIL", "doU", "doSUBOK", "doSUBCMD", "doUNSUB", "doEOS", "doCS", "doOV", "doCONF", "doREQOK", "doREQERR", "doSYNC", "doSYNC_G", "doSYNC_NG", "diffTimeSync", "slowAvg", "schedule_evtTransportTimeout", "schedule_evtRetryTimeout", "schedule_evtRecoveryTimeout", "schedule_evtIdleTimeout", "schedule_evtPollingTimeout", "schedule_evtCtrlTimeout", "schedule_evtKeepaliveTimeout", "schedule_evtStalledTimeout", "schedule_evtReconnectTimeout", "schedule_evtRhbTimeout", "createTimer", "cancel_evtTransportTimeout", "cancel_evtRetryTimeout", "cancel_evtKeepaliveTimeout", "cancel_evtStalledTimeout", "cancel_evtReconnectTimeout", "cancel_evtRhbTimeout", "cancel_evtIdleTimeout", "cancel_evtPollingTimeout", "cancel_evtCtrlTimeout", "cancel_evtRecoveryTimeout", "waitingInterval", "exit_tr", "entry_m111", "entry_m112", "entry_m113", "entry_m115", "entry_rec", "exit_w", "exit_ws", "exit_wp", "exit_hs", "exit_hp", "exit_ctrl", "exit_rec", "exit_keepalive_unit", "exit_w_to_m", "exit_ws_to_m", "exit_wp_to_m", "exit_hs_to_m", "exit_hs_to_rec", "exit_hp_to_m", "exit_hp_to_rec", "exit_ctrl_to_m", "exit_rec_to_m", "randomPause", "generateFreshReqId", "generateFreshSubId", "genAbortSubscriptions", "genAckMessagesWS", "genAbortMessages", "resetSequenceMap", "isSwitching", "encodeSwitch", "encodeConstrain", "getPendingControls", "sendControlWS", "sendMsgWS", "sendPengingControlsWS", "sendPendingMessagesWS", "sendBatchWS", "sendHeartbeatWS", "sendPendingControlsHTTP", "sendPendingMessagesHTTP", "sendHeartbeatHTTP", "sendBatchHTTP", "prepareBatchWS", "prepareBatchHTTP", "getHeadersForRequestOtherThanCreate", "getServerAddress", "relateSubManager", "unrelateSubManager", "isRelatedWithSubManager", "relateMsgManager", "unrelateMsgManager", "getAndSetNextMsgProg", "onPropertyChange", "traceEvent", "connect", "disconnect", "getStatus", "sendMessage", "subscribeExt", "unsubscribe", "getSubscriptions"]
2509
+ _hx_methods = ["disposeSession", "disposeClient", "evtExtConnect", "evtExtConnect_NextRegion", "evtExtConnect_NetworkReachabilityRegion", "doInstallPageLifecycle", "doUnistallPageLifecycle", "evtPageFrozen", "evtPageResumed", "evtNetworkNotReachable", "evtNetworkReachable", "evtOnlineAgain", "evtServerAddressChanged", "evtExtDisconnect", "evtSelectCreate", "evtWSOpen", "evtMessage", "evtCtrlMessage", "evtTransportTimeout", "evtTransportFatalError", "evtTransportError", "evtIdleTimeout", "evtPollingTimeout", "evtKeepaliveTimeout", "evtStalledTimeout", "evtReconnectTimeout", "evtRestartKeepalive", "evtWSOK", "evtCONERR", "evtEND", "evtERROR", "evtREQOK_withoutReqId", "evtREQOK", "evtREQOK_Forward", "evtREQOK_TransportRegion", "evtREQERR", "evtREQERR_Forward", "evtREQERR_TransportRegion", "evtPROG", "evtLOOP", "evtCONOK", "evtSERVNAME", "evtCLIENTIP", "evtCONS", "evtPROBE", "evtNOOP", "evtSYNC", "evtSYNC_PushingRegion", "evtMSGDONE", "evtMSGFAIL", "evtU", "evtSUBOK", "evtSUBCMD", "evtUNSUB", "evtEOS", "evtCS", "evtOV", "evtCONF", "evtCheckAvg", "evtSendPendingControls", "evtSendPendingMessages", "evtSelectRhb", "evtExtSetReverseHeartbeatInterval", "evtRestartHeartbeat", "evtRhbTimeout", "evtDisposeCtrl", "evtStartRecovery", "evtRecoveryTimeout", "evtCheckRecoveryTimeout", "evtCreate", "evtCheckTransport", "evtCheckBW", "evtCheckCtrlRequests", "evtCtrlDone", "evtCtrlFatalError", "evtCtrlError", "evtCtrlTimeout", "evtSendControl", "evtSendHeartbeat", "evtStartSession", "evtEndSession", "evtRetry", "evtRetry_NextRegion", "evtTerminate", "evtTerminate_NextRegion", "evtTerminate_NetworkReachabilityRegion", "evtRetryTimeout", "evtExtSetForcedTransport", "evtExtSetRequestedMaxBandwidth", "evtForceSlowing", "evtForcePolling", "evtSendMessage", "evtSwitchTransport", "evtSwitchTransport_forwardToTransportRegion", "onFreshData", "onStaleData", "isFreshData", "openWS", "openWS_Create", "openWS_Bind", "sendCreateWS", "sendBindWS_Streaming", "sendBindWS_FirstPolling", "sendBindWS_Polling", "sendDestroyWS", "sendHttpRequest", "sendCreateHTTP", "sendBindHTTP_Streaming", "sendBindHTTP_Polling", "sendCreateTTL", "sendRecovery", "disposeWS", "closeWS", "suspendWS_Streaming", "disableWS", "disableHTTP_Streaming", "disableStreaming", "enableAllTransports", "disposeHTTP", "closeHTTP", "disposeCtrl", "closeCtrl", "notifyStatus", "getBestForCreating", "getBestForBinding", "resetCurrentRetryDelay", "notifyServerErrorIfCauseIsError", "notifyServerError_CONERR", "notifyServerError_END", "notifyServerError_ERROR", "notifyServerError_REQERR", "doCONOK", "doCONOK_CreateWS", "doCONOK_BindWS_Streaming", "doCONOK_BindWS_Polling", "doCONOK_CreateHTTP", "doCONOK_BindHTTP_Streaming", "doCONOK_BindHTTP_Polling", "doSERVNAME", "doCLIENTIP", "doCONS", "doLOOP", "doPROG", "doMSGDONE", "doMSGFAIL", "doU", "doSUBOK", "doSUBCMD", "doUNSUB", "doEOS", "doCS", "doOV", "doCONF", "doREQOK", "doREQERR", "doSYNC", "doSYNC_G", "doSYNC_NG", "diffTimeSync", "slowAvg", "schedule_evtTransportTimeout", "schedule_evtRetryTimeout", "schedule_evtRecoveryTimeout", "schedule_evtIdleTimeout", "schedule_evtPollingTimeout", "schedule_evtCtrlTimeout", "schedule_evtKeepaliveTimeout", "schedule_evtStalledTimeout", "schedule_evtReconnectTimeout", "schedule_evtRhbTimeout", "createTimer", "cancel_evtTransportTimeout", "cancel_evtRetryTimeout", "cancel_evtKeepaliveTimeout", "cancel_evtStalledTimeout", "cancel_evtReconnectTimeout", "cancel_evtRhbTimeout", "cancel_evtIdleTimeout", "cancel_evtPollingTimeout", "cancel_evtCtrlTimeout", "cancel_evtRecoveryTimeout", "waitingInterval", "exit_tr", "entry_m111", "entry_m112", "entry_m113", "entry_m115", "entry_rec", "exit_w", "exit_ws", "exit_wp", "exit_hs", "exit_hp", "exit_ctrl", "exit_rec", "exit_keepalive_unit", "exit_w_to_m", "exit_ws_to_m", "exit_wp_to_m", "exit_hs_to_m", "exit_hs_to_rec", "exit_hp_to_m", "exit_hp_to_rec", "exit_ctrl_to_m", "exit_rec_to_m", "randomPause", "generateFreshReqId", "generateFreshSubId", "genAbortSubscriptions", "genAckMessagesWS", "genAbortMessages", "resetSequenceMap", "isSwitching", "encodeSwitch", "encodeConstrain", "getPendingControls", "sendControlWS", "sendMsgWS", "sendPengingControlsWS", "sendPendingMessagesWS", "sendBatchWS", "sendHeartbeatWS", "sendPendingControlsHTTP", "sendPendingMessagesHTTP", "sendHeartbeatHTTP", "sendBatchHTTP", "prepareBatchWS", "prepareBatchHTTP", "getHeadersForRequestOtherThanCreate", "getServerAddress", "relateSubManager", "unrelateSubManager", "isRelatedWithSubManager", "relateMsgManager", "unrelateMsgManager", "getAndSetNextMsgProg", "onPropertyChange", "traceEvent", "connect", "disconnect", "getStatus", "sendMessage", "subscribeExt", "unsubscribe", "getSubscriptions"]
2446
2510
  _hx_statics = ["frz_globalPageLifecycle"]
2447
2511
 
2448
2512
  def __init__(self,client,factory):
@@ -2931,7 +2995,7 @@ class com_lightstreamer_client_internal_ClientMachine:
2931
2995
  _gthis.notifyStatus("DISCONNECTED")
2932
2996
  _gthis.notifyServerErrorIfCauseIsError(terminationCause)
2933
2997
  _gthis.state.goto_m_from_wp(100)
2934
- _gthis.exit_ws_to_m()
2998
+ _gthis.exit_wp_to_m()
2935
2999
  _gthis.evtTerminate(terminationCause)
2936
3000
  else:
2937
3001
  tmp = _gthis.state.s_wp
@@ -3314,6 +3378,103 @@ class com_lightstreamer_client_internal_ClientMachine:
3314
3378
  else:
3315
3379
  pass
3316
3380
 
3381
+ def evtTransportFatalError(self,errCode,errMsg):
3382
+ self.traceEvent("transport.fatal.error")
3383
+ terminationCause = com_lightstreamer_client_internal__ClientMachine_TerminationCause.TC_standardError(errCode,errMsg)
3384
+ _g = self.state.s_m
3385
+ if (((_g == 122) or ((_g == 121))) or ((_g == 120))):
3386
+ self.disposeWS()
3387
+ self.notifyStatus("DISCONNECTED")
3388
+ self.notifyServerErrorIfCauseIsError(terminationCause)
3389
+ self.state.s_m = 100
3390
+ self.state.traceState()
3391
+ self.cancel_evtTransportTimeout()
3392
+ self.evtTerminate(terminationCause)
3393
+ elif (_g == 130):
3394
+ self.disposeHTTP()
3395
+ self.notifyStatus("DISCONNECTED")
3396
+ self.notifyServerErrorIfCauseIsError(terminationCause)
3397
+ self.state.s_m = 100
3398
+ self.state.traceState()
3399
+ self.cancel_evtTransportTimeout()
3400
+ self.evtTerminate(terminationCause)
3401
+ elif (_g == 140):
3402
+ self.disposeHTTP()
3403
+ self.notifyStatus("DISCONNECTED")
3404
+ self.notifyServerErrorIfCauseIsError(terminationCause)
3405
+ self.state.s_m = 100
3406
+ self.state.traceState()
3407
+ self.cancel_evtTransportTimeout()
3408
+ self.evtTerminate(terminationCause)
3409
+ elif (_g == 150):
3410
+ _g = self.state.s_tr
3411
+ if (_g is not None):
3412
+ if (_g == 210):
3413
+ self.disposeWS()
3414
+ self.notifyStatus("DISCONNECTED")
3415
+ self.notifyServerErrorIfCauseIsError(terminationCause)
3416
+ self.state.clear_w()
3417
+ self.state.goto_m_from_session(100)
3418
+ self.exit_w()
3419
+ self.evtEndSession()
3420
+ self.evtTerminate(terminationCause)
3421
+ elif (_g == 220):
3422
+ self.disposeHTTP()
3423
+ self.notifyStatus("DISCONNECTED")
3424
+ self.notifyServerErrorIfCauseIsError(terminationCause)
3425
+ self.state.goto_m_from_session(100)
3426
+ self.cancel_evtTransportTimeout()
3427
+ self.evtEndSession()
3428
+ self.evtTerminate(terminationCause)
3429
+ elif (_g == 230):
3430
+ self.disposeHTTP()
3431
+ self.notifyStatus("DISCONNECTED")
3432
+ self.notifyServerErrorIfCauseIsError(terminationCause)
3433
+ self.state.goto_m_from_session(100)
3434
+ self.cancel_evtTransportTimeout()
3435
+ self.evtEndSession()
3436
+ self.evtTerminate(terminationCause)
3437
+ elif (_g == 240):
3438
+ self.disposeWS()
3439
+ self.notifyStatus("DISCONNECTED")
3440
+ self.notifyServerErrorIfCauseIsError(terminationCause)
3441
+ self.state.goto_m_from_ws(100)
3442
+ self.exit_ws_to_m()
3443
+ self.evtTerminate(terminationCause)
3444
+ elif (_g == 250):
3445
+ self.disposeWS()
3446
+ self.notifyStatus("DISCONNECTED")
3447
+ self.notifyServerErrorIfCauseIsError(terminationCause)
3448
+ self.state.goto_m_from_wp(100)
3449
+ self.exit_wp_to_m()
3450
+ self.evtTerminate(terminationCause)
3451
+ elif (_g == 260):
3452
+ self.disposeHTTP()
3453
+ self.notifyStatus("DISCONNECTED")
3454
+ self.notifyServerErrorIfCauseIsError(terminationCause)
3455
+ self.state.goto_m_from_rec(100)
3456
+ self.exit_rec_to_m()
3457
+ self.evtTerminate(terminationCause)
3458
+ elif (_g == 270):
3459
+ if (self.state.s_h == 710):
3460
+ self.disposeHTTP()
3461
+ self.notifyStatus("DISCONNECTED")
3462
+ self.notifyServerErrorIfCauseIsError(terminationCause)
3463
+ self.state.goto_m_from_hs(100)
3464
+ self.exit_hs_to_m()
3465
+ self.evtTerminate(terminationCause)
3466
+ elif (self.state.s_h == 720):
3467
+ self.disposeHTTP()
3468
+ self.notifyStatus("DISCONNECTED")
3469
+ self.notifyServerErrorIfCauseIsError(terminationCause)
3470
+ self.state.goto_m_from_hp(100)
3471
+ self.exit_hp_to_m()
3472
+ self.evtTerminate(terminationCause)
3473
+ else:
3474
+ pass
3475
+ else:
3476
+ pass
3477
+
3317
3478
  def evtTransportError(self):
3318
3479
  self.traceEvent("transport.error")
3319
3480
  _g = self.state.s_m
@@ -5285,6 +5446,16 @@ class com_lightstreamer_client_internal_ClientMachine:
5285
5446
  self.cancel_evtCtrlTimeout()
5286
5447
  self.evtCheckCtrlRequests()
5287
5448
 
5449
+ def evtCtrlFatalError(self,code,msg):
5450
+ self.traceEvent("ctrl.fatal.error")
5451
+ if (self.state.s_ctrl == 1102):
5452
+ self.disposeHTTP()
5453
+ self.notifyStatus("DISCONNECTED")
5454
+ self.notifyServerError_ERROR(code,msg)
5455
+ self.state.goto_m_from_ctrl(100)
5456
+ self.exit_ctrl_to_m()
5457
+ self.evtTerminate(com_lightstreamer_client_internal__ClientMachine_TerminationCause.TC_standardError(code,msg))
5458
+
5288
5459
  def evtCtrlError(self):
5289
5460
  self.traceEvent("ctrl.error")
5290
5461
  if (self.state.s_ctrl == 1102):
@@ -5790,7 +5961,16 @@ class com_lightstreamer_client_internal_ClientMachine:
5790
5961
  _gthis.lock.synchronized(_hx_local_6)
5791
5962
  com_lightstreamer_internal__Threads_Threads_Fields_.sessionThread.loop.call_soon_threadsafe(_hx_local_7)
5792
5963
  onError = _hx_local_8
5793
- return self.wsFactory(url,headers,onOpen,onText,onError)
5964
+ def _hx_local_11(client,code,error):
5965
+ def _hx_local_10():
5966
+ def _hx_local_9():
5967
+ if client.isDisposed():
5968
+ return
5969
+ _gthis.evtTransportFatalError(code,error)
5970
+ _gthis.lock.synchronized(_hx_local_9)
5971
+ com_lightstreamer_internal__Threads_Threads_Fields_.sessionThread.loop.call_soon_threadsafe(_hx_local_10)
5972
+ onFatalError = _hx_local_11
5973
+ return self.wsFactory(url,headers,onOpen,onText,onError,onFatalError)
5794
5974
 
5795
5975
  def openWS_Create(self):
5796
5976
  self.connectTs = python_lib_Timeit.default_timer()
@@ -5915,11 +6095,20 @@ class com_lightstreamer_client_internal_ClientMachine:
5915
6095
  _gthis.lock.synchronized(_hx_local_3)
5916
6096
  com_lightstreamer_internal__Threads_Threads_Fields_.sessionThread.loop.call_soon_threadsafe(_hx_local_4)
5917
6097
  onError = _hx_local_5
5918
- def _hx_local_7():
5919
- def _hx_local_6(client):
6098
+ def _hx_local_8(client,errCode,errMsg):
6099
+ def _hx_local_7():
6100
+ def _hx_local_6():
6101
+ if client.isDisposed():
6102
+ return
6103
+ _gthis.evtTransportFatalError(errCode,errMsg)
6104
+ _gthis.lock.synchronized(_hx_local_6)
6105
+ com_lightstreamer_internal__Threads_Threads_Fields_.sessionThread.loop.call_soon_threadsafe(_hx_local_7)
6106
+ onFatalError = _hx_local_8
6107
+ def _hx_local_10():
6108
+ def _hx_local_9(client):
5920
6109
  pass
5921
- return self.httpFactory(url,req.getEncodedString(),headers,onText,onError,_hx_local_6)
5922
- return _hx_local_7()
6110
+ return self.httpFactory(url,req.getEncodedString(),headers,onText,onError,onFatalError,_hx_local_9)
6111
+ return _hx_local_10()
5923
6112
 
5924
6113
  def sendCreateHTTP(self):
5925
6114
  req = com_lightstreamer_internal_RequestBuilder()
@@ -6820,16 +7009,25 @@ class com_lightstreamer_client_internal_ClientMachine:
6820
7009
  _gthis.lock.synchronized(_hx_local_3)
6821
7010
  com_lightstreamer_internal__Threads_Threads_Fields_.sessionThread.loop.call_soon_threadsafe(_hx_local_4)
6822
7011
  onError = _hx_local_5
6823
- def _hx_local_8(client):
7012
+ def _hx_local_8(client,errCode,errMsg):
6824
7013
  def _hx_local_7():
6825
7014
  def _hx_local_6():
6826
7015
  if client.isDisposed():
6827
7016
  return
6828
- _gthis.evtCtrlDone()
7017
+ _gthis.evtCtrlFatalError(errCode,errMsg)
6829
7018
  _gthis.lock.synchronized(_hx_local_6)
6830
7019
  com_lightstreamer_internal__Threads_Threads_Fields_.sessionThread.loop.call_soon_threadsafe(_hx_local_7)
6831
- onDone = _hx_local_8
6832
- self.ctrl_http = self.ctrlFactory(url,body,headers,onText,onError,onDone)
7020
+ onFatalError = _hx_local_8
7021
+ def _hx_local_11(client):
7022
+ def _hx_local_10():
7023
+ def _hx_local_9():
7024
+ if client.isDisposed():
7025
+ return
7026
+ _gthis.evtCtrlDone()
7027
+ _gthis.lock.synchronized(_hx_local_9)
7028
+ com_lightstreamer_internal__Threads_Threads_Fields_.sessionThread.loop.call_soon_threadsafe(_hx_local_10)
7029
+ onDone = _hx_local_11
7030
+ self.ctrl_http = self.ctrlFactory(url,body,headers,onText,onError,onFatalError,onDone)
6833
7031
 
6834
7032
  def prepareBatchWS(self,reqType,pendings,requestLimit):
6835
7033
  if (len(pendings) <= 0):
@@ -8492,7 +8690,7 @@ class haxe_io_Bytes:
8492
8690
  __slots__ = ("length", "b")
8493
8691
  _hx_fields = ["length", "b"]
8494
8692
  _hx_methods = ["getString"]
8495
- _hx_statics = ["ofString"]
8693
+ _hx_statics = ["alloc", "ofString"]
8496
8694
 
8497
8695
  def __init__(self,length,b):
8498
8696
  self.length = length
@@ -8503,6 +8701,10 @@ class haxe_io_Bytes:
8503
8701
  raise haxe_Exception.thrown(haxe_io_Error.OutsideBounds)
8504
8702
  return self.b[pos:pos+_hx_len].decode('UTF-8','replace')
8505
8703
 
8704
+ @staticmethod
8705
+ def alloc(length):
8706
+ return haxe_io_Bytes(length,bytearray(length))
8707
+
8506
8708
  @staticmethod
8507
8709
  def ofString(s,encoding = None):
8508
8710
  b = bytearray(s,"UTF-8")
@@ -11960,22 +12162,23 @@ com_lightstreamer_internal_IFactory._hx_class = com_lightstreamer_internal_IFact
11960
12162
  class com_lightstreamer_internal_Factory:
11961
12163
  _hx_class_name = "com.lightstreamer.internal.Factory"
11962
12164
  _hx_is_interface = "False"
11963
- __slots__ = ("connectionOptions",)
11964
- _hx_fields = ["connectionOptions"]
12165
+ __slots__ = ("connectionOptions", "connectionDetails")
12166
+ _hx_fields = ["connectionOptions", "connectionDetails"]
11965
12167
  _hx_methods = ["createWsClient", "createHttpClient", "createCtrlClient", "createReachabilityManager", "createTimer", "randomMillis", "createPageLifecycleFactory"]
11966
12168
  _hx_interfaces = [com_lightstreamer_internal_IFactory]
11967
12169
 
11968
12170
  def __init__(self,client):
11969
12171
  self.connectionOptions = client.connectionOptions
12172
+ self.connectionDetails = client.connectionDetails
11970
12173
 
11971
- def createWsClient(self,url,headers,onOpen,onText,onError):
12174
+ def createWsClient(self,url,headers,onOpen,onText,onError,onFatalError):
11972
12175
  return com_lightstreamer_internal_WsClient(url,headers,self.connectionOptions.getProxy(),com_lightstreamer_internal_Globals.instance.getTrustManagerFactory(),onOpen,onText,onError)
11973
12176
 
11974
- def createHttpClient(self,url,body,headers,onText,onError,onDone):
12177
+ def createHttpClient(self,url,body,headers,onText,onError,onFatalError,onDone):
11975
12178
  return com_lightstreamer_internal_HttpClient(url,body,headers,self.connectionOptions.getProxy(),com_lightstreamer_internal_Globals.instance.getTrustManagerFactory(),onText,onError,onDone)
11976
12179
 
11977
- def createCtrlClient(self,url,body,headers,onText,onError,onDone):
11978
- return self.createHttpClient(url,body,headers,onText,onError,onDone)
12180
+ def createCtrlClient(self,url,body,headers,onText,onError,onFatalError,onDone):
12181
+ return self.createHttpClient(url,body,headers,onText,onError,onFatalError,onDone)
11979
12182
 
11980
12183
  def createReachabilityManager(self,host):
11981
12184
  return com_lightstreamer_internal_ReachabilityManager()
@@ -14731,6 +14934,86 @@ class haxe_ValueException(haxe_Exception):
14731
14934
  haxe_ValueException._hx_class = haxe_ValueException
14732
14935
 
14733
14936
 
14937
+ class haxe_crypto_Base64:
14938
+ _hx_class_name = "haxe.crypto.Base64"
14939
+ _hx_is_interface = "False"
14940
+ __slots__ = ()
14941
+ _hx_statics = ["CHARS", "BYTES", "decode"]
14942
+
14943
+ @staticmethod
14944
+ def decode(_hx_str,complement = None):
14945
+ if (complement is None):
14946
+ complement = True
14947
+ if complement:
14948
+ while (HxString.charCodeAt(_hx_str,(len(_hx_str) - 1)) == 61):
14949
+ _hx_str = HxString.substr(_hx_str,0,-1)
14950
+ return haxe_crypto_BaseCode(haxe_crypto_Base64.BYTES).decodeBytes(haxe_io_Bytes.ofString(_hx_str))
14951
+ haxe_crypto_Base64._hx_class = haxe_crypto_Base64
14952
+
14953
+
14954
+ class haxe_crypto_BaseCode:
14955
+ _hx_class_name = "haxe.crypto.BaseCode"
14956
+ _hx_is_interface = "False"
14957
+ __slots__ = ("base", "nbits", "tbl")
14958
+ _hx_fields = ["base", "nbits", "tbl"]
14959
+ _hx_methods = ["initTable", "decodeBytes"]
14960
+
14961
+ def __init__(self,base):
14962
+ self.tbl = None
14963
+ _hx_len = base.length
14964
+ nbits = 1
14965
+ while (_hx_len > ((1 << nbits))):
14966
+ nbits = (nbits + 1)
14967
+ if ((nbits > 8) or ((_hx_len != ((1 << nbits))))):
14968
+ raise haxe_Exception.thrown("BaseCode : base length must be a power of two.")
14969
+ self.base = base
14970
+ self.nbits = nbits
14971
+
14972
+ def initTable(self):
14973
+ tbl = list()
14974
+ _g = 0
14975
+ while (_g < 256):
14976
+ i = _g
14977
+ _g = (_g + 1)
14978
+ python_internal_ArrayImpl._set(tbl, i, -1)
14979
+ _g = 0
14980
+ _g1 = self.base.length
14981
+ while (_g < _g1):
14982
+ i = _g
14983
+ _g = (_g + 1)
14984
+ python_internal_ArrayImpl._set(tbl, self.base.b[i], i)
14985
+ self.tbl = tbl
14986
+
14987
+ def decodeBytes(self,b):
14988
+ nbits = self.nbits
14989
+ if (self.tbl is None):
14990
+ self.initTable()
14991
+ tbl = self.tbl
14992
+ size = ((b.length * nbits) >> 3)
14993
+ out = haxe_io_Bytes.alloc(size)
14994
+ buf = 0
14995
+ curbits = 0
14996
+ pin = 0
14997
+ pout = 0
14998
+ while (pout < size):
14999
+ while (curbits < 8):
15000
+ curbits = (curbits + nbits)
15001
+ buf = (buf << nbits)
15002
+ pos = pin
15003
+ pin = (pin + 1)
15004
+ i = python_internal_ArrayImpl._get(tbl, b.b[pos])
15005
+ if (i == -1):
15006
+ raise haxe_Exception.thrown("BaseCode : invalid encoded char")
15007
+ buf = (buf | i)
15008
+ curbits = (curbits - 8)
15009
+ pos1 = pout
15010
+ pout = (pout + 1)
15011
+ out.b[pos1] = (((buf >> curbits) & 255) & 255)
15012
+ return out
15013
+
15014
+ haxe_crypto_BaseCode._hx_class = haxe_crypto_BaseCode
15015
+
15016
+
14734
15017
  class haxe_ds_IntMap:
14735
15018
  _hx_class_name = "haxe.ds.IntMap"
14736
15019
  _hx_is_interface = "False"
@@ -15310,8 +15593,8 @@ sys_thread__Thread_HxThread.mainThread.events = sys_thread_EventLoop()
15310
15593
  com_lightstreamer_client__ConnectionDetails_ConnectionDetails_Fields_.DEFAULT_SERVER = None
15311
15594
  com_lightstreamer_internal__Constants_Constants_Fields_.TLCP_VERSION = "TLCP-2.5.0"
15312
15595
  com_lightstreamer_internal__Constants_Constants_Fields_.FULL_TLCP_VERSION = (HxOverrides.stringOrNull(com_lightstreamer_internal__Constants_Constants_Fields_.TLCP_VERSION) + ".lightstreamer.com")
15313
- com_lightstreamer_internal__Constants_Constants_Fields_.LS_LIB_VERSION = (("2.2.2" + " build ") + "20250523")
15314
- com_lightstreamer_internal__Constants_Constants_Fields_.LS_CID = "v Wntytg4pkpW37AM3O4hwLri8M4OC67h9c"
15596
+ com_lightstreamer_internal__Constants_Constants_Fields_.LS_LIB_VERSION = (("2.2.3" + " build ") + "20260820")
15597
+ com_lightstreamer_internal__Constants_Constants_Fields_.LS_CID = "v Wntytg4pkpW37AM3P4hwLri8M4OD6Ah6e"
15315
15598
  com_lightstreamer_internal__Constants_Constants_Fields_.LS_LIB_NAME = "python_client"
15316
15599
  com_lightstreamer_internal__Constants_Constants_Fields_.LS_CREATE_REALM = ""
15317
15600
  LSLightstreamerClient.LIB_NAME = com_lightstreamer_internal__Constants_Constants_Fields_.LS_LIB_NAME
@@ -15361,4 +15644,6 @@ com_lightstreamer_log__LoggerTools_LoggerTools_Fields_.reachabilityLogger = com_
15361
15644
  com_lightstreamer_log__LoggerTools_LoggerTools_Fields_.subscriptionLogger = com_lightstreamer_log_LogManager.getLogger("lightstreamer.subscriptions")
15362
15645
  com_lightstreamer_log__LoggerTools_LoggerTools_Fields_.messageLogger = com_lightstreamer_log_LogManager.getLogger("lightstreamer.messages")
15363
15646
  com_lightstreamer_log__LoggerTools_LoggerTools_Fields_.cookieLogger = com_lightstreamer_log_LogManager.getLogger("lightstreamer.cookies")
15364
- com_lightstreamer_log__LoggerTools_LoggerTools_Fields_.pageLogger = com_lightstreamer_log_LogManager.getLogger("lightstreamer.page")
15647
+ com_lightstreamer_log__LoggerTools_LoggerTools_Fields_.pageLogger = com_lightstreamer_log_LogManager.getLogger("lightstreamer.page")
15648
+ haxe_crypto_Base64.CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
15649
+ haxe_crypto_Base64.BYTES = haxe_io_Bytes.ofString(haxe_crypto_Base64.CHARS)
@@ -1131,6 +1131,8 @@ class LightstreamerClient:
1131
1131
  :param delayTimeout: a timeout, expressed in milliseconds. If higher than the Server configured timeout on missing messages, the latter will be used instead. The parameter is optional; if a negative value is supplied, the Server configured timeout on missing messages will be applied. This timeout is ignored for the special "UNORDERED_MESSAGES" sequence, although a server-side timeout on missing messages still applies.
1132
1132
  :param listener: an object suitable for receiving notifications about the processing outcome. The parameter is optional; if not supplied, no notification will be available.
1133
1133
  :param enqueueWhileDisconnected: if this flag is set to true, and the client is in a disconnected status when the provided message is handled, then the message is not aborted right away but is queued waiting for a new session. Note that the message can still be aborted later when a new session is established.
1134
+
1135
+ .. seealso:: `Client-to-Server Messaging in Lightstreamer Explained <https://lightstreamer.com/blog/client-to-server-messaging-in-lightstreamer-explained/>`_
1134
1136
  """
1135
1137
  self.delegate.sendMessage(message, sequence, delayTimeout, listener, enqueueWhileDisconnected)
1136
1138
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lightstreamer-client-lib
3
- Version: 2.2.2
3
+ Version: 2.2.3
4
4
  Summary: Lightstreamer Client SDK
5
5
  Author-email: Lightstreamer Srl <support@lightstreamer.com>
6
6
  License: Apache-2.0
@@ -35,7 +35,7 @@ The sdk is supported on Python 3.7 and above.
35
35
 
36
36
  ## Quickstart
37
37
 
38
- To connect to a Lightstreamer Server, a [LightstreamerClient](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.LightstreamerClient) object has to be created, configured, and instructed to connect to the Lightstreamer Server.
38
+ To connect to a Lightstreamer Server, a [LightstreamerClient](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.LightstreamerClient) object has to be created, configured, and instructed to connect to the Lightstreamer Server.
39
39
  A minimal version of the code that creates a LightstreamerClient and connects to the Lightstreamer Server on *https://push.lightstreamer.com* will look like this:
40
40
 
41
41
  ```python
@@ -45,7 +45,7 @@ client = LightstreamerClient("http://push.lightstreamer.com/","DEMO")
45
45
  client.connect()
46
46
  ```
47
47
 
48
- For each subscription to be subscribed to a Lightstreamer Server a [Subscription](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.Subscription) instance is needed.
48
+ For each subscription to be subscribed to a Lightstreamer Server a [Subscription](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.Subscription) instance is needed.
49
49
  A simple Subscription containing three items and two fields to be subscribed in *MERGE* mode is easily created (see [Lightstreamer General Concepts](https://lightstreamer.com/docs/ls-server/latest/General%20Concepts.pdf)):
50
50
 
51
51
  ```python
@@ -55,7 +55,7 @@ sub.setRequestedSnapshot("yes")
55
55
  client.subscribe(sub)
56
56
  ```
57
57
 
58
- Before sending the subscription to the server, usually at least one [SubscriptionListener](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_api.SubscriptionListener) is attached to the Subscription instance in order to consume the real-time updates. The following code shows the values of the fields *stock_name* and *last_price* each time a new update is received for the subscription:
58
+ Before sending the subscription to the server, usually at least one [SubscriptionListener](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_api.SubscriptionListener) is attached to the Subscription instance in order to consume the real-time updates. The following code shows the values of the fields *stock_name* and *last_price* each time a new update is received for the subscription:
59
59
 
60
60
  ```python
61
61
  class SubListener(SubscriptionListener):
@@ -89,7 +89,7 @@ client.connect()
89
89
 
90
90
  ## Logging
91
91
 
92
- To enable the internal client logger, create a [LoggerProvider](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_api.LoggerProvider) and set it as the default provider of [LightstreamerClient](https://lightstreamer.com/api/ls-python-client/2.2.2/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.LightstreamerClient.setLoggerProvider).
92
+ To enable the internal client logger, create a [LoggerProvider](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_api.LoggerProvider) and set it as the default provider of [LightstreamerClient](https://lightstreamer.com/api/ls-python-client/2.2.3/lightstreamer.html#lightstreamer.client.ls_python_client_wrapper.LightstreamerClient.setLoggerProvider).
93
93
 
94
94
  ```python
95
95
  import sys, logging
@@ -108,7 +108,7 @@ Compatible with Lightstreamer Server since version 7.4.0.
108
108
 
109
109
  - [Live demos](https://demos.lightstreamer.com/?p=lightstreamer&t=client&lclient=python)
110
110
 
111
- - [API Reference](https://lightstreamer.com/api/ls-python-client/2.2.2/index.html)
111
+ - [API Reference](https://lightstreamer.com/api/ls-python-client/2.2.3/index.html)
112
112
 
113
113
  ## Support
114
114