mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-02-08 16:05:07 +00:00
285 lines
8.6 KiB
Python
285 lines
8.6 KiB
Python
![]() |
'''
|
||
|
/* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
'''
|
||
|
|
||
|
# _*_
|
||
|
from django.shortcuts import render, render_to_response
|
||
|
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound
|
||
|
import json
|
||
|
import socket
|
||
|
import os
|
||
|
|
||
|
# Create your views here.
|
||
|
|
||
|
|
||
|
avaliable_list = [
|
||
|
{'ID': 'timer', 'Version': '1.0'},
|
||
|
{'ID': 'connection', 'Version': '1.0'},
|
||
|
{'ID': 'event_publisher', 'Version': '3.0'},
|
||
|
{'ID': 'event_subscriber', 'Version': '1.0'},
|
||
|
{'ID': 'request_handler', 'Version': '1.0'},
|
||
|
{'ID': 'sensor', 'Version': '1.0'},
|
||
|
{'ID': 'ui_app', 'Version': '1.0'}
|
||
|
]
|
||
|
|
||
|
# Help
|
||
|
def help(req):
|
||
|
# return "Help" page
|
||
|
return render(req, "help.html")
|
||
|
|
||
|
# View
|
||
|
def index(req):
|
||
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
|
||
|
host = '127.0.0.1'
|
||
|
port = 8889
|
||
|
msg = ""
|
||
|
err = ""
|
||
|
|
||
|
try:
|
||
|
s.connect((host, port))
|
||
|
s.send(bytes("query:all", encoding='utf8'))
|
||
|
s.settimeout(10)
|
||
|
msg = s.recv(1024)
|
||
|
except socket.timeout as e:
|
||
|
err = "empty"
|
||
|
print("no client connected")
|
||
|
except socket.error as e:
|
||
|
err = "refused"
|
||
|
print("server not started")
|
||
|
|
||
|
s.close()
|
||
|
|
||
|
device_list = []
|
||
|
if msg != "":
|
||
|
devices = msg.decode('utf-8').split("*")
|
||
|
for dev in devices:
|
||
|
dev_info = eval(dev)
|
||
|
addr = dev_info['addr']
|
||
|
port = dev_info['port']
|
||
|
apps = dev_info['num']
|
||
|
device_list.append({'IP': addr, 'Port': port, 'apps': apps})
|
||
|
else:
|
||
|
if err == "refused":
|
||
|
return render(req, "empty.html")
|
||
|
|
||
|
dlist = device_list
|
||
|
|
||
|
return render(req, 'mysite.html', {'dlist': json.dumps(dlist)})
|
||
|
|
||
|
|
||
|
def apps(req):
|
||
|
open_status = ''
|
||
|
search_node = []
|
||
|
if req.method == "POST":
|
||
|
dev_search = req.POST['mykey']
|
||
|
dev_addr = req.POST['voip']
|
||
|
dev_port = req.POST['voport']
|
||
|
open_status = 'open'
|
||
|
for i in avaliable_list:
|
||
|
if i['ID'] == dev_search:
|
||
|
search_node = [{'ID':dev_search, 'Version': '1.0'}]
|
||
|
print("search_node:",search_node)
|
||
|
break
|
||
|
else:
|
||
|
search_node = ["Nothing find"]
|
||
|
print( "final:",search_node)
|
||
|
else:
|
||
|
dev_addr = req.GET['ip']
|
||
|
dev_port = req.GET['port']
|
||
|
open_status = 'close'
|
||
|
|
||
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
host = '127.0.0.1'
|
||
|
port = 8889
|
||
|
msg = ""
|
||
|
err = ""
|
||
|
|
||
|
try:
|
||
|
s.connect((host, port))
|
||
|
s.send(bytes("query:"+dev_addr+":"+str(dev_port), encoding='utf8'))
|
||
|
msg = s.recv(1024)
|
||
|
except socket.error as e:
|
||
|
print("unable to connect to server")
|
||
|
msg = b"fail"
|
||
|
s.close()
|
||
|
|
||
|
app_list = []
|
||
|
|
||
|
if msg != "":
|
||
|
if msg.decode() == "fail":
|
||
|
return render(req, "empty.html")
|
||
|
else:
|
||
|
dic = eval(msg.decode(encoding='utf8'))
|
||
|
app_num = dic["num"]
|
||
|
for i in range(app_num):
|
||
|
app_list.append(
|
||
|
{'pname': dic["applet"+str(i+1)], 'status': 'Installed', 'current_version': '1.0'})
|
||
|
|
||
|
alist = app_list
|
||
|
device_info = []
|
||
|
device_info.append(
|
||
|
{'IP': dev_addr, 'Port': str(dev_port), 'apps': app_num})
|
||
|
|
||
|
print(device_info)
|
||
|
return render(req, 'application.html', {'alist': json.dumps(alist), 'dlist': json.dumps(device_info), 'llist': json.dumps(avaliable_list),
|
||
|
"open_status":json.dumps(open_status),"search_node": json.dumps(search_node),})
|
||
|
|
||
|
|
||
|
def appDownload(req):
|
||
|
dev_addr = req.GET['ip']
|
||
|
dev_port = req.GET['port']
|
||
|
app_name = req.GET['name']
|
||
|
|
||
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
|
||
|
host = '127.0.0.1'
|
||
|
port = 8889
|
||
|
msg = ""
|
||
|
|
||
|
app_path = os.path.abspath(os.path.join(os.getcwd(), "static", "upload"))
|
||
|
if app_path[-1] != '/':
|
||
|
app_path += '/'
|
||
|
|
||
|
try:
|
||
|
s.connect((host, port))
|
||
|
s.send(bytes("install:"+dev_addr+":"+str(dev_port)+":"+app_name +
|
||
|
":"+app_path + app_name + ".wasm", encoding='utf8'))
|
||
|
msg = s.recv(1024)
|
||
|
except socket.error as e:
|
||
|
print("unable to connect to server")
|
||
|
s.close()
|
||
|
|
||
|
success = "ok"
|
||
|
fail = "Fail!"
|
||
|
status = [success, fail]
|
||
|
print(msg)
|
||
|
if msg == b"fail":
|
||
|
return HttpResponse(json.dumps({
|
||
|
"status": fail
|
||
|
}))
|
||
|
elif msg == b"success":
|
||
|
return HttpResponse(json.dumps({
|
||
|
"status": success
|
||
|
}))
|
||
|
else:
|
||
|
return HttpResponse(json.dumps({
|
||
|
"status": eval(msg.decode())["error message"].split(':')[1]
|
||
|
}))
|
||
|
|
||
|
|
||
|
def appDelete(req):
|
||
|
dev_addr = req.GET['ip']
|
||
|
dev_port = req.GET['port']
|
||
|
app_name = req.GET['name']
|
||
|
|
||
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||
|
|
||
|
host = '127.0.0.1'
|
||
|
port = 8889
|
||
|
s.connect((host, port))
|
||
|
s.send(bytes("uninstall:"+dev_addr+":" +
|
||
|
str(dev_port)+":"+app_name, encoding='utf8'))
|
||
|
msg = s.recv(1024)
|
||
|
s.close()
|
||
|
r = HttpResponse("ok")
|
||
|
return r
|
||
|
|
||
|
static_list = [{'ID': 'timer', 'Version': '1.0'}, {'ID': 'connection', 'Version': '1.0'}, {'ID': 'event_publisher', 'Version': '3.0'}, {
|
||
|
'ID': 'event_subscriber', 'Version': '1.0'}, {'ID': 'reuqest_handler', 'Version': '1.0'}, {'ID': 'sensor', 'Version': '1.0'}, {'ID': 'ui_app', 'Version': '1.0'}]
|
||
|
|
||
|
def store(req):
|
||
|
|
||
|
store_path = os.path.join('static', 'upload')
|
||
|
status = []
|
||
|
|
||
|
print(user_file_list)
|
||
|
return render(req, 'appstore.html', {'staticlist': json.dumps(static_list), 'flist': json.dumps(user_file_list),'ulist':json.dumps(status)})
|
||
|
|
||
|
user_file_list = []
|
||
|
files_list = []
|
||
|
def uploadapps(req):
|
||
|
status = []
|
||
|
local_list = ['timer','connection','event_publisher','event_subscriber','reuqest_handler','sensor']
|
||
|
req.encoding = 'utf-8'
|
||
|
if req.method == 'POST':
|
||
|
myfile = req.FILES.get("myfile", None)
|
||
|
obj = req.FILES.get('myfile')
|
||
|
store_path = os.path.join('static', 'upload')
|
||
|
file_path = os.path.join('static', 'upload', obj.name)
|
||
|
|
||
|
if not os.path.exists(store_path):
|
||
|
os.makedirs(store_path)
|
||
|
|
||
|
file_name = obj.name.split(".")[0]
|
||
|
file_prefix = obj.name.split(".")[-1]
|
||
|
|
||
|
|
||
|
if file_prefix != "wasm":
|
||
|
status = ["Not a wasm file"]
|
||
|
elif file_name in local_list:
|
||
|
status = ["This App is preloaded"]
|
||
|
elif file_name in files_list:
|
||
|
status = ["This App is already uploaded"]
|
||
|
else:
|
||
|
status = []
|
||
|
avaliable_list.append({'ID': file_name, 'Version': '1.0'})
|
||
|
user_file_list.append({'ID': file_name, 'Version': '1.0'})
|
||
|
files_list.append(file_name)
|
||
|
|
||
|
print(user_file_list)
|
||
|
f = open(file_path, 'wb')
|
||
|
for chunk in obj.chunks():
|
||
|
f.write(chunk)
|
||
|
f.close()
|
||
|
return render(req, 'appstore.html', {'staticlist': json.dumps(static_list), 'flist': json.dumps(user_file_list),'ulist':json.dumps(status)})
|
||
|
|
||
|
appname_list = []
|
||
|
|
||
|
def addapps(request):
|
||
|
types = ''
|
||
|
print("enter addapps")
|
||
|
request.encoding = 'utf-8'
|
||
|
app_dic = {'ID': '', 'Version': ''}
|
||
|
|
||
|
# if request.method == 'get':
|
||
|
if "NAME" in request.GET:
|
||
|
a_name = request.GET['NAME']
|
||
|
if a_name != "" and a_name not in appname_list:
|
||
|
appname_list.append(a_name)
|
||
|
message = request.GET['NAME'] + request.GET['Version']
|
||
|
app_dic['ID'] = request.GET['NAME']
|
||
|
app_dic['Version'] = request.GET['Version']
|
||
|
avaliable_list.append(app_dic)
|
||
|
else:
|
||
|
types = "Exist"
|
||
|
print(avaliable_list)
|
||
|
return render(request, 'appstore.html', {'alist': json.dumps(avaliable_list)})
|
||
|
|
||
|
def removeapps(req):
|
||
|
app_name = req.GET['name']
|
||
|
app_version = req.GET['version']
|
||
|
remove_app = {'ID': app_name, 'Version': app_version}
|
||
|
avaliable_list.remove(remove_app)
|
||
|
user_file_list.remove(remove_app)
|
||
|
files_list.remove(app_name)
|
||
|
return render(req, 'appstore.html', {'alist': json.dumps(avaliable_list),'flist': json.dumps(user_file_list)})
|
||
|
|
||
|
# Test
|
||
|
if __name__ == "__main__":
|
||
|
print(device_list[0]['IP'])
|
||
|
print(device['IP'])
|