mirror of
				https://github.com/bytecodealliance/wasm-micro-runtime.git
				synced 2025-10-30 21:02:27 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			274 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			274 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| '''
 | |
|  /* Copyright (C) 2019 Intel Corporation.  All rights reserved.
 | |
|  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
|  */
 | |
| '''
 | |
| 
 | |
| # _*_
 | |
| 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'])
 | 
