Skip to content

Commit 0d79ad4

Browse files
authored
Merge pull request #69 from tylerlong/master
Add heartbeat feature to WebSocket, fix #68
2 parents 1e64ac6 + 88fea17 commit 0d79ad4

File tree

8 files changed

+37
-23
lines changed

8 files changed

+37
-23
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ from ringcentral import SDK
5151

5252
sdk = SDK('CLIENT_ID', 'CLIENT_SECRET', 'SERVER')
5353
platform = sdk.platform()
54-
platform.login('USERNAME', 'EXTENSION', 'PASSWORD')
54+
platform.login(jwt='JWT_TOKEN')
55+
```
5556

5657
res = platform.get('/account/~/extension/~')
5758
print('User loaded ' + res.json().name)
@@ -110,7 +111,7 @@ database.append({"Customer":"Lukas","Payment":"Due","PhoneNumber":"xxxxxxxxxxx"}
110111

111112
sdk = SDK('CLIENT_ID', 'CLIENT_SECRET', 'SERVER')
112113
platform = sdk.platform()
113-
platform.login('USERNAME', 'EXTENSION', 'PASSWORD')
114+
platform.login(jwt='JWT_TOKEN')
114115

115116
def sendSMS(message, number):
116117
params = {'from': {'phoneNumber': 'USERNAME'},'to': [{'phoneNumber': number}],'text': message}

dev-notes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ Edit `.env` to specify credentials
4242
Run a demo file like this:
4343

4444
```
45-
python demo_sms.py
45+
python3 ringcentral/demos/demo_fax.py
4646
```
4747

4848

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ observable==0.3.*
22
pubnub==4.*
33
pycryptodome==3.*
44
requests==2.*
5-
websockets==11.*
5+
websockets==11.*

ringcentral/demos/demo_fax.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import os,time,ssl
22
from dotenv import load_dotenv
3-
from ringcentral import SDK
43
import certifi
54
import urllib.request
5+
import sys
6+
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))) # Add the project root to sys.path
7+
from ringcentral import SDK
68

79
load_dotenv()
810
#env = dotenv_values(".env")
@@ -23,17 +25,14 @@ def send_fax():
2325
'coverPageText': "This is a demo Fax page from Python"
2426
})
2527

26-
with open('test.txt', "r") as f:
27-
content = f.read()
28-
#attachment = ('test.jpg', content)
29-
attachment = (
30-
'test.png',
31-
urllib.request.urlopen('https://www.ringcentral.com/content/dam/rc-2018/en_us/images/logo.jpg',
32-
context=ssl.create_default_context(cafile=certifi.where())).read(),
33-
'image/png'
34-
)
35-
builder.add(attachment)
36-
request = builder.request('/restapi/v1.0/account/~/extension/~/fax')
28+
attachment = (
29+
'test.png',
30+
urllib.request.urlopen('https://www.ringcentral.com/content/dam/rc-2018/en_us/images/logo.jpg',
31+
context=ssl.create_default_context(cafile=certifi.where())).read(),
32+
'image/png'
33+
)
34+
builder.add(attachment)
35+
request = builder.request('/restapi/v1.0/account/~/extension/~/fax')
3736
resp = platform.send_request(request)
3837
jsonObj = resp.json()
3938
print ("Fax sent. Message id: " + str(jsonObj.id))
@@ -59,7 +58,7 @@ def check_fax_message_status(messageId):
5958
# Authenticate a user using a personal JWT token
6059
def login():
6160
try:
62-
platform.login( jwt=os.environ.get('RINGCENTRAL_JWT_TOKEN') )
61+
platform.login(jwt=os.environ.get('RINGCENTRAL_JWT_TOKEN') )
6362
send_fax()
6463
except Exception as e:
6564
print ("Unable to authenticate to platform. Check credentials." + str(e))

ringcentral/demos/demo_web_socket.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
from dotenv import load_dotenv
2-
from ringcentral import SDK
3-
from ringcentral.websocket.events import WebSocketEvents
42
import json
53
import uuid
64
import os
75
import asyncio
6+
import sys
7+
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))) # Add the project root to sys.path
8+
from ringcentral import SDK
9+
from ringcentral.websocket.events import WebSocketEvents
810

911

1012
def on_message(message):
1113
print("\n WebSocket message:\n")
1214
print(json.loads(message))
13-
print("\n User email:\n")
14-
print(json.loads(message)[1]["contact"]["email"])
15+
if(len(json.loads(message)) > 1):
16+
print("\n User email:\n")
17+
print(json.loads(message)[1]["contact"]["email"])
1518

1619

1720
def on_created(web_socket_client):

ringcentral/test/testcase.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def get_sdk(self, mock):
1818
sdk = SDK('whatever', 'whatever', 'https://whatever', redirect_uri='https://whatever-redirect')
1919

2020
self.authentication_mock(mock)
21-
sdk.platform().login('18881112233', None, 'password')
21+
sdk.platform().login(jwt='jwt-token')
2222

2323
matcher = re.compile('pubsub\.pubnub\.com')
2424

ringcentral/websocket/web_socket_client.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from .events import WebSocketEvents
77
import json
88
import asyncio
9-
9+
import uuid
1010

1111
class WebSocketClient(Observable):
1212
def __init__(self, platform):
@@ -48,6 +48,17 @@ async def open_connection(self, ws_uri, ws_access_token):
4848
self._web_socket = connection_info
4949
self._is_ready = True
5050
self.trigger(WebSocketEvents.connectionCreated, self)
51+
52+
# heartbeat every 10 minutes
53+
async def timer_function():
54+
while True:
55+
if self._done:
56+
timer.cancel()
57+
break
58+
await asyncio.sleep(600)
59+
await self.send_message([{"type": "Heartbeat", "messageId": str(uuid.uuid4())}])
60+
timer = asyncio.create_task(timer_function())
61+
5162
await asyncio.sleep(0)
5263
while True:
5364
message = await websocket.recv()

0 commit comments

Comments
 (0)