84 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from http.server import BaseHTTPRequestHandler, HTTPServer
 | |
| import rgbUtils.RGBStipContollerJsonConverter as rgbCJson
 | |
| from pathlib import Path
 | |
| from mimetypes import guess_type
 | |
| from os import curdir, sep
 | |
| import json
 | |
| 
 | |
| from rgbUtils.debug import debug
 | |
| 
 | |
| class HTTPRequestHandler(BaseHTTPRequestHandler):
 | |
|     rgbC = None
 | |
| 
 | |
|     def __init__(self, rgbC, *args, **kwargs):
 | |
|         self.rgbC = rgbC
 | |
|         # BaseHTTPRequestHandler calls do_GET **inside** __init__ !!!
 | |
|         # So we have to call super().__init__ after setting attributes.
 | |
|         super().__init__(*args, **kwargs)
 | |
|     
 | |
|     def do_GET(self):
 | |
|         try:
 | |
|             if "/api/" in self.path:
 | |
|                 # set response header application/json when calling the api
 | |
|                 self.send_response(200)
 | |
|                 self.send_header("Content-type", "application/json")
 | |
|                 self.end_headers()
 | |
| 
 | |
|                 if "/getEffects" in self.path:
 | |
|                     self.wfile.write(json.dumps({'result': rgbCJson.getEffects(self.rgbC)}).encode(encoding='utf_8'))
 | |
| 
 | |
|                 if "/getRGBStrips" in self.path:
 | |
|                     self.wfile.write(json.dumps({'result': rgbCJson.getRGBStrips(self.rgbC)}).encode(encoding='utf_8'))
 | |
| 
 | |
|                 if "/getEffectThreads" in self.path:
 | |
|                     self.wfile.write(json.dumps({'result': rgbCJson.getEffectThreads(self.rgbC)}).encode(encoding='utf_8'))
 | |
| 
 | |
|             else:
 | |
|                 #Get files as requested from htdocs, set mimetype
 | |
|                 request = curdir + sep + "htdocs" + self.path
 | |
|                 debug(request)
 | |
| 
 | |
|                 if Path(request).is_dir():
 | |
|                     debug("isdir: "+request)
 | |
|                     if not request[-1:] == "/":
 | |
|                         debug("no /: "+request)
 | |
|                         request += "/"
 | |
|                     request += "index.html"
 | |
|                 debug("fi request: "+request)
 | |
| 
 | |
|                 mimetype = guess_type(request)[0]
 | |
|                 f = open(request, 'rb')
 | |
|                 self.send_response(200)
 | |
|                 self.send_header("Content-type", mimetype)
 | |
|                 self.end_headers()
 | |
|                 self.wfile.write(f.read())
 | |
|                 f.close()
 | |
|         except IOError:
 | |
|             self.send_error(404,'File Not Found: %s' % self.path)
 | |
|     
 | |
|     def do_POST(self):
 | |
|         try:
 | |
|             if "/api/" in self.path:
 | |
|                 self.send_response(200)
 | |
|                 data = json.loads(self.rfile.read(int(self.headers['Content-Length'])).decode('utf-8'))
 | |
|                 self.end_headers()
 | |
|                 print(data)
 | |
|                 if "/startEffect" in self.path:
 | |
|                     enabledRGBStrips = []
 | |
|                     for rgbStripObject in data['rgbStrips']:
 | |
|                         if rgbStripObject[1]:
 | |
|                             enabledRGBStrips.append(self.rgbC.getRGBStrips()[int(rgbStripObject[0])])
 | |
|                     
 | |
|                     self.rgbC.startEffect(self.rgbC.getEffects()[data['effect']],enabledRGBStrips,data['params'])
 | |
|                 if "/moveRGBStripToEffectThread" in self.path:
 | |
|                     print(data)
 | |
|                     self.rgbC.moveRGBStripToEffectThread(self.rgbC.getRGBStrips()[data['rgbStrip']],self.rgbC.getEffectThreads()[data['effectThread']])
 | |
|                 if "/updateEffectParams" in self.path:
 | |
|                     result = {}
 | |
|                     print(data)
 | |
|                 self.wfile.write("OK".encode(encoding='utf_8'))
 | |
|         except IOError:
 | |
|             self.send_error(404,'File Not Found: %s' % self.path)
 | |
| 
 | |
|     def log_message(self, format, *args):
 | |
|         return |