techoverload/slave/main.py

86 lines
2.3 KiB
Python

# importing vlc module
from os import listdir
from os.path import isfile, join
from random import randint
from time import sleep
import paho.mqtt.client as mqtt
from video import Video
import multiprocessing
import sys
from random import randint
from PIL import Image, ImageDraw
import cv2
class App:
def __init__(self, client, x, y):
self.x = x
self.y = y
self.client = client
self.video = Video(x, y)
self.videos = [join("slave/videos", f) for f in listdir("slave/videos") if isfile(join("slave/videos", f))]
print(self.videos)
print(self.videos[randint(0, len(self.videos)-1)])
def on_connect(self, client, userdata, flags, rc):
print("Connected with result code "+str(rc))
self.client.subscribe("slave")
def on_message(self, client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
if msg.payload == b'idle':
print("Idle")
self.x = multiprocessing.Process(target = self.idle)
self.x.start()
elif msg.payload == b'stop':
print("Stop")
try:
self.x.terminate()
except:
pass
def idle(self):
last = -1
secondlast = -1
while True:
try:
self.x.terminate()
except:
pass
i = randint(0, len(self.videos)-1)
if i == last or i == secondlast:
continue
secondlast = last
last = i
video = self.videos[i]
print(video)
self.video.start(video)
self.blank()
sleep(1)
def blank(self):
image = Image.new('RGB', (2000, 2000), color='black')
cv2.namedWindow("window", cv2.WND_PROP_FULLSCREEN)
cv2.moveWindow("window", self.x, self.y)
cv2.setWindowProperty("window",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)
cv2.imshow("window", image)
def main():
client = mqtt.Client()
app = App(client, int(sys.argv[1]), int(sys.argv[2]))
client.on_connect = app.on_connect
client.on_message = app.on_message
client.connect("10.1.1.162", 1883, 60)
client.loop_forever()
if __name__ == "__main__":
main()