172 lines
4.2 KiB
Python
172 lines
4.2 KiB
Python
import uuid
|
||
import json
|
||
|
||
from django.http import HttpResponse, JsonResponse, FileResponse
|
||
from dwebsocket.decorators import *
|
||
from rest_framework.decorators import api_view
|
||
from .unjson import UnJson
|
||
|
||
'''!------------------------WEBSOCKET--------------------------------!'''
|
||
clients = {} # 创建客户端列表,存储所有在线客户端
|
||
cameras = {} # 摄像头列表
|
||
|
||
|
||
# 网页websocket链接
|
||
@accept_websocket
|
||
def link(request):
|
||
# 判断是不是ws请求
|
||
if request.is_websocket():
|
||
userid = str(uuid.uuid4())
|
||
while True:
|
||
message = request.websocket.wait()
|
||
if not message:
|
||
break
|
||
else:
|
||
print("客户端链接成功:" + str(message, encoding="utf-8"))
|
||
# 保存客户端的ws对象,以便给客户端发送消息,每个客户端分配一个唯一标识
|
||
clients[userid] = request.websocket
|
||
|
||
|
||
# 摄像头websocket链接
|
||
@accept_websocket
|
||
def cameraLink(request):
|
||
# 判断是不是ws请求
|
||
if request.is_websocket():
|
||
userid = str(uuid.uuid4())
|
||
while True:
|
||
message = request.websocket.wait()
|
||
if not message:
|
||
break
|
||
else:
|
||
print("客户端链接成功:" + str(message, encoding="utf-8"))
|
||
# 保存客户端的ws对象,以便给客户端发送消息,每个客户端分配一个唯一标识
|
||
cameras[userid] = request.websocket
|
||
|
||
|
||
# 发送互动弹幕
|
||
def send(request):
|
||
# 获取消息
|
||
msg = request.POST.get("msg")
|
||
# 获取到当前所有在线客户端,即clients
|
||
# 遍历给所有客户端推送消息
|
||
print('request:', request)
|
||
print('request.data:', request.POST)
|
||
if msg:
|
||
for client in clients:
|
||
clients[client].send(msg.encode('utf-8'))
|
||
return HttpResponse({"msg": "success"})
|
||
else:
|
||
HttpResponse('发送格式错误')
|
||
|
||
|
||
def refresh():
|
||
msg = 'refresh'
|
||
for client in clients:
|
||
clients[client].send(msg.encode('utf-8'))
|
||
return HttpResponse('已让所有客户端刷新')
|
||
|
||
|
||
@api_view(['GET'])
|
||
def reboot(request):
|
||
"""
|
||
重启
|
||
:param request:
|
||
:return:
|
||
"""
|
||
msg = {
|
||
'todo': 'reboot'
|
||
}
|
||
for camera in cameras:
|
||
cameras[camera].send(json.dumps(msg, ensure_ascii=False))
|
||
return HttpResponse('相机已重启')
|
||
|
||
|
||
@api_view(['POST'])
|
||
def entering(request):
|
||
"""
|
||
录入信息
|
||
id-人员id
|
||
type-人员列表
|
||
:param request:
|
||
:return:
|
||
"""
|
||
data = UnJson(request.data)
|
||
msg = {
|
||
'todo': 'entering',
|
||
'data': {
|
||
'id': data.id,
|
||
'type': data.type
|
||
}
|
||
}
|
||
|
||
for camera in cameras:
|
||
cameras[camera].send(json.dumps(msg, ensure_ascii=False))
|
||
return HttpResponse('相机已开始录制')
|
||
|
||
|
||
@api_view(['GET'])
|
||
def takePhoto(request):
|
||
"""
|
||
拍照
|
||
:param request:
|
||
:return:
|
||
"""
|
||
msg = {
|
||
'todo': 'takePhoto',
|
||
'data': {'fuc': 'shutter'}
|
||
}
|
||
for camera in cameras:
|
||
cameras[camera].send(json.dumps(msg, ensure_ascii=False))
|
||
return HttpResponse('相机已拍照')
|
||
|
||
|
||
@api_view(['GET'])
|
||
def standard(request):
|
||
"""
|
||
拍照
|
||
:param request:
|
||
:return:
|
||
"""
|
||
msg = {
|
||
'todo': 'takePhoto',
|
||
'data': {'fuc': 'standard'}
|
||
}
|
||
for camera in cameras:
|
||
cameras[camera].send(json.dumps(msg, ensure_ascii=False))
|
||
return HttpResponse('相机已标定')
|
||
|
||
|
||
@api_view(['POST'])
|
||
def changeFuc(request):
|
||
"""
|
||
更改功能
|
||
fuc:更改的功能 0:无 1微笑检测 2交互检测 3摔倒检测 4禁区入侵
|
||
:param request:
|
||
:return:
|
||
"""
|
||
data = UnJson(request.data)
|
||
print(data.fuc)
|
||
msg = {
|
||
'todo': 'change',
|
||
'data': {'fuc': data.fuc}
|
||
}
|
||
print(msg)
|
||
|
||
for camera in cameras:
|
||
cameras[camera].send(json.dumps(msg, ensure_ascii=False))
|
||
return HttpResponse('相机功能已更改')
|
||
|
||
|
||
@api_view(['POST'])
|
||
def totalNum(request):
|
||
data = UnJson(request.data)
|
||
msg = {
|
||
'elderNum': data.old,
|
||
'staffNum': data.employee,
|
||
'volunteerNum': data.volunteer,
|
||
'strangerNum': data.stranger
|
||
}
|
||
for client in clients:
|
||
clients[client].send(json.dumps(msg, ensure_ascii=False))
|
||
return HttpResponse("success")
|