ToorChat/toorchat.py

121 lines
3.5 KiB
Python
Raw Normal View History

2012-10-20 22:38:28 +00:00
#!/usr/bin/env python
import sys
from rflib import *
import rflib.chipcon_nic as rfnic
import atexit
from libtoorchat import *
2012-10-21 03:21:22 +00:00
from os import system
import curses
import time
from threading import Thread
2012-10-20 22:38:28 +00:00
2012-10-21 03:21:22 +00:00
def thread_run(visual):
''' This is our function for the thread '''
#Thread should run until exit
while not visual.exit:
2012-10-20 22:38:28 +00:00
try:
2012-10-21 03:21:22 +00:00
msg, timestamp = visual.badge.RFrecv()
2012-10-21 18:23:58 +00:00
toor_message = ToorChatProtocol.parse_chat_message(msg)
2012-10-21 03:59:50 +00:00
if toor_message != None:
2012-10-21 18:23:58 +00:00
if toor_message.type == ToorChatProtocol.get_chat_type():
visual.message_queue.append(toor_message)
if toor_message.type == ToorChatProtocol.get_web_request_type():
#If we are registered as a server, lets typ to make that request
if visual.server:
ToorChatProtocol.get_web_messages(toor_message.data, visual)
2012-10-20 22:38:28 +00:00
except ChipconUsbTimeoutException:
pass
2012-10-21 03:21:22 +00:00
class Visualizer():
def __init__(self):
self.screen = curses.initscr()
self.screen.nodelay(1)
self.badge = RfCat(idx=0)
self.badge.setModeRX()
self.protocol = ToorChatProtocol(self.badge)
self.message_queue = []
2012-10-21 04:44:30 +00:00
self.user = None
2012-10-21 03:21:22 +00:00
#This when set to True will kill the thread
self.exit = False
2012-10-21 18:23:58 +00:00
self.server = False
def set_server(self):
self.server = True
2012-10-21 03:21:22 +00:00
def start(self):
self.__start_recv_thread__()
self.__run__()
def __start_recv_thread__(self):
'''This spins off a thread to deal with recving information from the rf device '''
self.thread = Thread(target=thread_run, args=(self,))
self.thread.start()
def __run__(self):
try:
self.screen_max_y, self.screen_max_x = self.screen.getmaxyx()
self.__draw_frame__()
self.screen.refresh()
2012-10-21 05:03:08 +00:00
self.last_message_index = 0
2012-10-21 03:21:22 +00:00
while True:
self.screen_max_y, self.screen_max_x = self.screen.getmaxyx()
2012-10-21 18:23:58 +00:00
self.screen.addstr(0, 1, "[S] Send Message [U] Set User Name [W] Load Website")
2012-10-21 05:03:08 +00:00
self.__add_message_to_screen__()
2012-10-21 03:21:22 +00:00
entry = self.screen.getch()
if entry == curses.KEY_RESIZE:
2012-10-21 05:10:47 +00:00
self.__draw_frame__(False)
2012-10-21 03:21:22 +00:00
if entry == ord('s'):
self.screen.nodelay(0)
2012-10-21 03:24:44 +00:00
user_input = self.screen.getstr(1, 1, 60)
2012-10-21 18:23:58 +00:00
old_message = self.protocol.send_chat_message(user_input, self.user)
2012-10-21 05:03:08 +00:00
self.message_queue.append(old_message)
2012-10-21 03:21:22 +00:00
self.screen.nodelay(1)
2012-10-21 04:44:30 +00:00
self.screen.addstr(1,1," "*(self.screen_max_x-3))
if entry == ord('u'):
self.screen.nodelay(0)
user_input = self.screen.getstr(1, 1, 60)
2012-10-21 04:46:59 +00:00
self.user = user_input[:USER_NAME_SIZE]
2012-10-21 04:44:30 +00:00
self.screen.nodelay(1)
self.screen.addstr(1,1," "*(self.screen_max_x-3))
2012-10-21 18:23:58 +00:00
if entry == ord('w'):
self.screen.nodelay(0)
user_input = self.screen.getstr(1, 1, 60)
self.protocol.send_web_request(user_input)
self.screen.nodelay(1)
self.screen.addstr(1,1," "*(self.screen_max_x-3))
2012-10-21 03:21:22 +00:00
except KeyboardInterrupt:
self.exit = True
self.stop()
2012-10-21 05:03:08 +00:00
def __add_message_to_screen__(self):
if len(self.message_queue) > 0:
message = self.message_queue[len(self.message_queue)-1]
message_string = str(message.user)+":"+ str(message.data)
self.screen.addstr(self.last_message_index+3,1, message_string + " "*(self.screen_max_x-(2+len(message_string))))
self.last_message_index +=1
self.message_queue.pop()
if self.last_message_index > self.screen_max_y-5:
self.last_message_index = 0
2012-10-21 05:10:47 +00:00
self.__draw_frame__()
2012-10-21 05:03:08 +00:00
2012-10-21 05:10:47 +00:00
def __draw_frame__(self, clear = True):
if clear:
self.screen.clear()
2012-10-21 03:21:22 +00:00
self.screen.border(0)
self.screen.addstr(2,1,"_"*(self.screen_max_x-2))
def stop(self):
curses.endwin()
2012-10-20 22:38:28 +00:00
if __name__ == '__main__':
2012-10-21 03:21:22 +00:00
visual = Visualizer()
2012-10-21 18:23:58 +00:00
if len(sys.argv) > 1:
if sys.argv[1] == "-s":
visual.set_server()
visual.start()