共享空间预约推送接口文档
<h1>共享空间预约消息推送接口文档</h1>
<h2>介绍</h2>
<p>TCP客户端长连接模式</p>
<p>地址: 39.103.95.22
端口: 5011</p>
<p>认证信息:<code>auth:应用ID</code>
会话心跳: 连续3次30s未收到客户端数据,预约推送服务端将主动断开与客户端的连接。
推送数据:</p>
<h2>消息内容</h2>
<p>预约创建消息:</p>
<pre><code>{
"action": "CreateReservation",
"body": {
"id": xx,
"appid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"space": {
"name": "xxx房间",
"address": "xxx楼xxx层xxx号"
},
"user": {
"uid": "uxxxxxxxxxx",
"did": x,
"d_name": "xxxx部门",
"phone": "xxxxxxxxxxx",
"card_number": "No.10001",
"name": "张三"
},
"start_time": "2023-01-31 17:00:00",
"end_time": "2023-01-31 17:30:00",
"note": "本次预约主题为,党建会议"
}
}</code></pre>
<p>预约删除消息:</p>
<pre><code>{
"action": "DeleteReservation",
"body": {
"id": xx,
"appid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"space": {
"name": "xxx房间",
"address": "xxx楼xxx层xxx号"
},
"user": {
"uid": "uxxxxxxxxxx",
"did": x,
"d_name": "xxxx部门",
"phone": "xxxxxxxxxxx",
"card_number": "No.10001",
"name": "张三"
},
"start_time": "2023-01-31 17:00:00",
"end_time": "2023-01-31 17:30:00",
"note": "本次预约主题为,党建会议"
}
}</code></pre>
<h2>参数解析:</h2>
<ul>
<li>action: CreateReservation创建预约,DeleteReservation取消预约</li>
<li>body:预约消息体
<ul>
<li>id:预约消息ID号,唯一,用于定位哪条消息</li>
<li>appid:应用id</li>
<li>space:预约房间信息
<ul>
<li>name:房间名称</li>
<li>address:房间地址</li>
</ul></li>
<li>user:预约者信息
<ul>
<li>uid: 预约者用户ID 唯一</li>
<li>did: 用户的部门id</li>
<li>d_name: 用户部门名称</li>
<li>phone:用户联系方式</li>
<li>card_number:自定义用户ID,可用于员工工号等</li>
<li>name:用户备注,用户姓名</li>
</ul></li>
<li>start_time: 预约开始时间</li>
<li>end_time: 预约结束时间</li>
<li>note:本次预约会议主题</li>
</ul></li>
</ul>
<h2>使用举例:</h2>
<pre><code>import os
import socket
import time
import threading
import json
class TCPSocket(object):
def __init__(self, size, ip, port):
"""
@param size: 报文上限大小
@param ip: ip地址
@param port: 端口
"""
self.sk = None
self.size = size
self.format = "utf8"
self.ip_port = (ip, port)
# 心跳频率
self.heart_interval = 25
self.adapt_time = False
# 建立socket连接
def connect(self):
self.sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
self.sk.connect(self.ip_port)
except Exception as e:
print("connect to server failed,prepare to reconnect", e)
self.reconnect()
# 重新连接 5s/次
def reconnect(self):
print("try to reconnect")
while True:
try:
self.sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sk.connect(self.ip_port)
self.login_send()
print('client start connect to host/port:{}'.format(self.ip_port))
break
except ConnectionRefusedError:
print(
'socket server refused or not started, reconnect to server in 5s .... host/port:{}'.format(
self.ip_port))
time.sleep(5)
except Exception as e:
print('do connect error:{}'.format(str(e)))
time.sleep(5)
print("reconnect successfully!!!")
# 发送登录验证
def login_send(self):
try:
login_msg = "auth:123456"
self.sk.send(login_msg.encode(self.format))
print("[tcp client] send logon message:{}".format(login_msg.replace(os.linesep, "")))
except socket.error:
print('socket error,do reconnect')
time.sleep(5)
except Exception as e:
print(e)
time.sleep(5)
def rec(self):
while True:
try:
message = self.sk.recv(self.size)
messages = self.parse_response_json(message)
if messages:
print(messages)
else:
print("no message from server or messages are not valid:{}".format(messages))
except socket.error as e:
print(e)
time.sleep(5)
self.reconnect()
except Exception as e:
print(e)
time.sleep(5)
# 间隔固定时间发送心跳
def heartbeats(self):
while True:
try:
msg = "ping"
self.sk.send(msg.encode(self.format))
print("[tcp client] send heart message:{}".format(msg.replace(os.linesep, "")))
except socket.error:
print('socket error,do reconnect')
self.reconnect()
except Exception as e:
print('other error occur', e)
time.sleep(5)
self.reconnect()
time.sleep(self.heart_interval)
def parse_response_json(self, data: bytes):
msgs = []
try:
data_list = data.decode(self.format).split(os.linesep)
data_list = list(filter(lambda x: x.strip().startswith("{"), data_list))
for msg in data_list:
msg = json.loads(msg)
msgs.append(msg)
return msgs
except Exception as e:
print(e)
return None
if __name__ == '__main__':
socket1 = TCPSocket(1024, "ip地址", 端口)
socket1.connect()
socket1.login_send()
t1 = threading.Thread(target=socket1.rec)
t2 = threading.Thread(target=socket1.heartbeats)
t1.start()
t2.start()</code></pre>