#!/usr/bin/python2 # -*- coding: utf-8 -*- import tornado.httpserver import tornado.websocket import tornado.ioloop import tornado.web import os class Websockethandleriluokka(tornado.websocket.WebSocketHandler): def open(self): self.rautakaytossafilu="/tmp/lavettikaytossa"; print "-Uusi yhteys-"; self.write_message("Sokettiserveri ok") #Huomautus, alusta tässä GPIO pinnit, tai avaa sarjaportti jos laitteisto kytketty siihen self.kahvarautaan=None; #Kaikki kunnossa, ohjataan rautaa komentojen perusteella def aja(self,message): print "vastaanotettiin " + message; if(message.startswith("eteen")): print "TODO: Molemmat moottorit eteenpäin"; #Kutsu rautakahva oliota self.write_message("eteenpäin"); if(message.startswith("stop")): print "TODO: Moottorit seis"; self.write_message("seis"); if(message.startswith("taakse")): print "TODO: Moottorit takapakkia"; self.write_message("taaksepain"); if(message.startswith("oikea")): print "TODO: Pyörimään myötäpäivään"; self.write_message("pyorii myotapaivaan"); if(message.startswith("vasen")): print "TODO: Pyörimään vastapaivään"; self.write_message("pyorii vastapaivaan"); #Alusta lowlevel yhteys def avaayhteys(self): print "otetaan rauta käyttöön"; open(self.rautakaytossafilu,'w').write("rauta on käytössä"); self.kahvarautaan=1;#Tässäkohdin luodaan low level yhteydestä vastaava olio (avaa sarjaportin yms) #Tämä self.kahvarautaan näkyy vain yhdessä instanssissa. Pitää pelata instanssitasolla, sillä tornadossa eri asiakkaille on sama PID def suljeyhteys(self): self.kahvarautaan=None; def on_message(self, message): if(self.kahvarautaan==None): #Yhteydenpito-oliota ei ole, jospa rauta olisi vapaa if(os.path.exists(self.rautakaytossafilu)):#ei ollu print "rauta on jonkun muun asiakkaan käytössä, tai tuhoa "+self.rautakaytossafilu; self.write_message("Rauta on käytössä nyt, odota"); else: self.avaayhteys(); else: self.aja(message);#Toimitaan normaalisti kun kerran laitekahva löytyy def on_close(self): print "yhteys suljettiin"; if(os.path.exists(self.rautakaytossafilu)): self.suljeyhteys(); print "tuhotaan "+self.rautakaytossafilu os.remove(self.rautakaytossafilu); class Webbisivuhandleriluokka(tornado.web.RequestHandler): def get(self): self.render("kauko.html"); #Vaihtoehtoisesti voi tulostaa suoraan tässä koodissa tyyliin self.write("Hello, world") application = tornado.web.Application([(r'/robotti', Websockethandleriluokka),(r"/", Webbisivuhandleriluokka)]) print "kuunnellaan" http_server = tornado.httpserver.HTTPServer(application) http_server.listen(2222) print "startataan"; tornado.ioloop.IOLoop.instance().start()