Beispiel #1
0
 def SaveIn(self, message, client):
     if (os.path.exists(message.Save + ".json")):
         mess = model.Message(id='0',
                              win='0',
                              quit=True,
                              Number=0,
                              idCl='1',
                              Load="No2").marshal()
         client.sendall(mess)
         return False
     try:
         with open("JSONF.json") as file:
             file_content = file.read().strip()
             if file_content:  # если нет
                 username = json.loads(file_content)
             else:
                 mess = model.Message(id='0',
                                      win='0',
                                      quit=True,
                                      Number=0,
                                      idCl='1',
                                      Load="No2").marshal()
                 client.sendall(mess)
                 return False
     except FileNotFoundError:
         return None
     except json.JSONDecodeError:
         return None
     with open(message.Save + ".json", "w") as write_file:
         json.dump(username, write_file, indent=4)
Beispiel #2
0
 def __init__(self, argv):
     self.clients = set()
     self.listen_thread = None
     self.port = None
     self.sock = None
     self.parse_args(argv)
     self.leader = client.Client()
     self.gamer = client.Client()
     self.game = 0
     self.message = model.Message()
     self.server_message = model.Message()
     self.server_message.username = messages.SERVER
     self.counter = 0
     self.stop = False
Beispiel #3
0
    def handle(self, client):
        while True:
            try:
                message = model.Message(**json.loads(self.receive(client)))
            except (ConnectionAbortedError, ConnectionResetError):
                print(CONNECTION_ABORTED)
                return
            if message.quit:
                client.close()
                self.clients.remove(client)
                return

            if SHUTDOWN_MESSAGE.lower() == message.message.lower():
                self.exit()
                return
            self.check(message)
            if self.first_client.name == message.username:
                self.first_client.last_message = message.message
            else:
                self.second_client.last_message = message.message

            print(str(self.timetable))
            print(str(self.first_client.name))
            print(str(self.first_client.last_message))
            print(str(self.second_client.name))
            print(str(self.second_client.last_message))

            self.broadcast(message)
            self.count += 1
            if self.count == 2:
                self.decide()
                if self.day != 5:
                    self.start_new_day()
                else:
                    self.finish()
Beispiel #4
0
    def post(self):
        name = self.request.get('name', '')
        comment = self.request.get('comment', '')

        try:
            message = model.Message(name=name, comment=comment)
            message.put()
            
            counter = model.Counter.get_by_key_name('message')
            if counter is None:
                counter = model.Counter(key_name='message')
            counter.value = counter.value + 1
            counter.put()
            if memcache.get('total_msgs'):
                memcache.incr('total_msgs')
            else:
                total_msgs = counter.value
                memcache.set('total_msgs', total_msgs)

            total_pages = counter.value / MSGS_PER_PAGE
            if counter.value % MSGS_PER_PAGE:
                total_pages += 1
            
            if memcache.get('msgs_%d' % total_pages):
                memcache.delete('msgs_%d' % total_pages)
            
            self.redirect('/')
        except BadValueError:
            self.response.out.write('You have not filled the name or comment field. <a href="/">Back &raquo;</a>')
Beispiel #5
0
 def all(self):
     messages = []
     for id_, data in self._db.items():
         m = model.Message(data['name'], data['message'])
         m.id = id_
         messages.append(messages)
     return messages
 def __init__(self, **kwargs):
     self.game = 0
     self.counter = 0
     self.leader = client.Client()
     self.gamer = client.Client()
     self.message = model.Message()
     self.__dict__.update(kwargs)
Beispiel #7
0
    def handle(self, client):
        while True:
            try:
                message = model.Message(**json.loads(self.receive(client)))
            except (ConnectionAbortedError, ConnectionResetError):
                print(CONNECTION_ABORTED)
                return
            if message.quit:
                client.close()
                self.clients.remove(client)
                return
            print(str(message))
            if SHUTDOWN_MESSAGE.lower() == message.message.lower():
                self.exit()
                return

            if message.username == messages.USERNAME_ROCKET:
                self.handle_rocket_msg(message)
            elif message.username == messages.USERNAME_GROUND:
                if self.ground_client is None:
                    self.ground_client = client
                    self.timer_thread = threading.Thread(
                        target=self.timer_update_param)
                    self.timer_thread.start()
                else:
                    time.sleep(parametr.MESSAGE_DELAY_SEC)
                    self.broadcast(message)
Beispiel #8
0
    def execute(self):
        # Initialize GUI
        if not self.ui.show():
            return

        # Initialize the socket
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        # Connect to the server
        while True:
            try:
                self.sock.connect((socket.gethostname(), server.PORT))
                break
            except (socket.error, OverflowError):
                pass

        # Receive information about the game state from the server (e. g. the username)
        try:
            message = model.Message(**json.loads(self.receive_all()))
        except (ConnectionAbortedError, ConnectionResetError):
            if not self.closing:
                self.ui.alert(ERROR, CONNECTION_ERROR)
            return

        self.username = message.username
        self.operations = message.operations
        self.ui.set_operations(self.operations)
        self.ui.gui.title(message.username)
        self.receive_worker = threading.Thread(target=self.receive)
        self.receive_worker.start()
        self.ui.loop()
Beispiel #9
0
def skt_recv(connection):
    """
    return a Message object
    """
    msg = _skt_recv_msg(connection)
    t = msg[0]
    p = None
    sp = None
    py = None
    ap = None
    idx = 1
    if t == REQUEST or t == CANCEL or t == PAYLOAD:
        p = int.from_bytes(msg[idx:idx + 4], ENDIAN)
        sp = int.from_bytes(msg[idx + 4:idx + 8], ENDIAN)
        idx = idx + 8
        if t == PAYLOAD:
            # Actually is msg[idx:], to save memory use a costant
            # since the purpose of this project is to distribute
            # content, thus receiving it in memory is good enough,
            # no need to actually write it to file system.
            py = 'PAYLOAD'
    if t == ANNOUNCE:
        ap_len = int.from_bytes(msg[idx:idx + 4], ENDIAN)
        idx = idx + 4
        ap = []
        for i in range(ap_len):
            ap.append(int.from_bytes(msg[idx:idx + 4], ENDIAN))
            idx = idx + 4
    if t == PEERID:
        p = int.from_bytes(msg[idx:idx + 4], ENDIAN)
    return model.Message(t, p, sp, py, ap)
Beispiel #10
0
    def receive(self):
        while True:
            try:
                message = model.Message(**json.loads(self.receive_all()))
            except (ConnectionAbortedError, ConnectionResetError):
                if not self.closing:
                    self.ui.alert(messages.ERROR, messages.CONNECTION_ERROR)
                return

            if message.message.find("Now {} lead".format(self.username)) == 0:
                self.ui.show_send_button()
                self.ui.show_message(message)
            else:
                if message.message.isdigit():
                    if not self.last_reciever == self.username:
                        self.ui.show_send_button()
                    if self.last_message.isdigit():
                        self.ui.show_timer(message)
                else:
                    self.ui.disable_send_button()
                    self.ui.show_message(message)

            if not message.username == messages.SERVER:
                self.last_reciever = message.username
            self.last_message = message.message
 def get_message_to_send(self):
     message = self.r_ui.message.get()
     if len(message) == 0:
         return
     self.r_ui.message.set("")
     return model.Message(username=self.username,
                          message=message,
                          quit=False)
Beispiel #12
0
 def __init__(self):
     self.clients = set()
     self.listen_thread = None
     self.port = 8081
     self.sock = None
     self.message = model.Message()
     self.message.username = "******"
     self.game = game_object.Game_obj()
 def exit(self):
     self.closing = True
     try:
         self.sock.sendall(model.Message(username=self.username, message="", quit=True).marshal())
     except (ConnectionResetError, ConnectionAbortedError, OSError):
         print(messages.CONNECTION_ERROR)
     finally:
         self.sock.close()
Beispiel #14
0
 def post(self):
     name = self.request.get("name")
     message_text = self.request.get("message_text")
     email = self.request.get("email")
     message = model.Message(message_text=message_text,
                             name=name,
                             email=email)
     message.put()
     return self.redirect_to("startseite")
    def get_speed_to_send(self):
        speed = self.r_ui.get_speed()
        if all([speed[param] == 0 for param in parametr.XYR]):
            return

        return model.Message(username=self.username,
                             rocket_speed=speed,
                             message="",
                             quit=False)
 def receive(self):
     while True:
         try:
             message = model.Message(**json.loads(self.receive_all()))
         except (ConnectionAbortedError, ConnectionResetError):
             if not self.closing:
                 self.ui.alert(messages.ERROR, messages.CONNECTION_ERROR)
             return
         self.ui.show_speed_or_message(message)
Beispiel #17
0
 def exit(self, S):
     self.closing = True
     try:
         self.sock.sendall(
             model.Message(quit=True, Number=0, idCl=S).marshal())
     except (ConnectionResetError, ConnectionAbortedError, OSError):
         print("Could not connect to server")
     finally:
         self.sock.close()
def msg(data):
    data.__setitem__('time',
                     datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    print(json.dumps(data))
    db.add(
        model.Message(content=json.dumps(data),
                      createdTime=datetime.datetime.now(),
                      channel=users[request.sid]))
    db.commit()
    emit('msg', data, room=users[request.sid])
Beispiel #19
0
    def handle(self, client):
        while True:
            if self.game.count == 0:
                self.broadcast(self.game)
            try:
                data = self.receive(client)

                if (data.find('count') == -1):
                    message = model.Message(**json.loads(data))
                else:
                    old_name_1 = self.game.first_client.name
                    old_name_2 = self.game.second_client.name
                    self.game = game_object.Game_obj(**json.loads(data))
                    self.game.first_client = client_model.Client(
                        **self.game.first_client)
                    self.game.second_client = client_model.Client(
                        **self.game.second_client)
                    self.game.first_client.name = old_name_1
                    self.game.second_client.name = old_name_2
                    self.message.message = "Game has been loaded It`s day " + str(
                        self.game.day)
                    self.broadcast(self.message)
                    continue

            except (ConnectionAbortedError, ConnectionResetError):
                print(CONNECTION_ABORTED)
                return

            if message.quit:
                client.close()
                self.clients.remove(client)
                return

            if SHUTDOWN_MESSAGE.lower() == message.message.lower():
                self.exit()
                return
            self.check(message)
            if self.game.first_client.name == message.username:
                self.game.first_client.last_message = message.message
            else:
                self.game.second_client.last_message = message.message

            self.broadcast(message)

            self.game.count += 1

            if self.game.count == 2:
                self.decide()

                print(self.game.first_client.points)
                print(self.game.second_client.points)
                if self.game.day != 5:
                    self.start_new_day()
                else:
                    self.finish()
Beispiel #20
0
 def timer_update_param(self):
     while True:
         self.timer_tic += 1
         self.update_speed_and_pos()
         self.end_of_game = self.is_win()
         if not self.end_of_game:
             if self.timer_tic >= parametr.SEND_EVERY_N_TIMER_TIC:
                 self.timer_tic = 0
                 message = model.Message(username=messages.USERNAME_SERVER,
                                         rocket_pos=self.rocket_pos,
                                         rocket_speed=self.speed,
                                         Lagrange_pos=self.L1)
                 self.ground_client.sendall(message.marshal())
             time.sleep(parametr.TIME_TO_UPDATE_SPEED_ML / 1000)
         else:
             message = model.Message(username="******",
                                     message="YOU WON",
                                     quit=False)
             self.broadcast(message)
             break
Beispiel #21
0
 def listen(self):
     self.obn()
     self.sock.listen(2)
     while True:
         try:
             client, address = self.sock.accept()
             self.N = self.N + 1
             if (self.N == 1):
                 mess = model.Message(quit=True, Number="-2").marshal()
                 client.sendall(mess)
             if (self.N == 2):
                 mess = model.Message(quit=True, Number="-1").marshal()
                 client.sendall(mess)
             print(self.N)
         except OSError:
             print("Connection aborted")
             return
         print(CONNECTED_PATTERN.format(*address))
         self.clients.add(client)
         threading.Thread(target=self.handle, args=(client, )).start()
Beispiel #22
0
 def end_game_for_this_client(self):
     """
     Метод, который вызывается при нажатии кнопки end у клиента
     """
     message = model.Message(username_last_player=self.username, quit=True)
     self.ui.add_number_button['state'] = 'disabled'
     self.ui.end_game_button['state'] = 'disabled'
     try:
         self.sock.sendall(message.marshal())
     except (ConnectionAbortedError, ConnectionResetError):
         if not self.closing:
             self.ui.alert(messages.ERROR, messages.CONNECTION_ERROR)
Beispiel #23
0
 def __init__(self):
     self.clients = set()
     self.listen_thread = None
     self.port = 8080
     self.sock = None
     self.day = 1
     self.timetable = self.rand()
     self.count = 0
     self.message = model.Message()
     self.message.username = "******"
     self.first_client = client.Client()
     self.second_client = client.Client()
Beispiel #24
0
 def send(self, event=None):
     message = self.ui.message.get()
     if len(message) == 0:
         return
     message = model.Message(username=self.username,
                             message=message,
                             quit=False)
     try:
         self.client.sock.sendall(message.marshal())
     except (ConnectionAbortedError, ConnectionResetError):
         if not self.closing:
             self.ui.alert(messages.ERROR, messages.CONNECTION_ERROR)
Beispiel #25
0
    def handle(self, client):

        while True:
            try:
                mess = json.loads(self.receive(client))
                message = model.Message(**mess)
            except (ConnectionAbortedError, ConnectionResetError):
                print("Connection aborted")
                return
            if (message.Save != None):
                self.SaveIn(message, client)
            elif (message.Load != None):
                self.LoadS(message, client)
            elif (message.Number == '-'):
                self.obn()
                for client2 in self.clients:
                    if (client == client2):
                        mess = model.Message(quit=True, Number="-1").marshal()
                        client2.sendall(mess)
                    else:
                        mess = model.Message(quit=True, Number="-2").marshal()
                        client2.sendall(mess)
            else:
                if message.quit:
                    self.obn()
                    client.close()
                    self.clients.remove(client)
                    print("The client disconnected")
                    t = 0
                    for client2 in self.clients:
                        mess = model.Message(quit=True, Number="-2").marshal()
                        client2.sendall(mess)
                        t = 1
                    if (t == 1):
                        self.N = 1
                    else:
                        self.N = 0
                    return
                self.Save(mess)
                self.broadcast(message, client)
Beispiel #26
0
 def receive(self):
     # Receive and handle messages from  the server
     while True:
         try:
             message = model.Message(**json.loads(self.receive_all()))
         except (ConnectionAbortedError, ConnectionResetError):
             if not self.closing:
                 self.ui.alert(ERROR, CONNECTION_ERROR)
             return
         if message.can_move:
             self.can_move = True
         print(self.can_move)
         self.ui.show_message(message)
Beispiel #27
0
 def exit(self):
     """
     Метод, который вызывался изначально, чтобы отключить текущего клиента от чата
     """
     self.closing = True
     try:
         self.sock.sendall(
             model.Message(username=self.username, message="",
                           quit=True).marshal())
     except (ConnectionResetError, ConnectionAbortedError, OSError):
         print(messages.CONNECTION_ERROR)
     finally:
         self.sock.close()
Beispiel #28
0
 def send(self, message):
     if len(message) == 0:
         return
     message = model.Message(id=message[0],
                             win=message[1],
                             quit=False,
                             Number=message[2],
                             idCl=message[3])
     try:
         self.sock.sendall(message.marshal())
     except (ConnectionAbortedError, ConnectionResetError):
         if not self.closing:
             print("Error")
Beispiel #29
0
 def first_hello_message(self):
     """
     Клиент пишет серверу пустое сообщение, только лишь с именем данного клиента,
     Чтобы сервер оповеслил всех остальных о новом игроке.
     Сервер делает рассылку с новым score, с учетом нового игрока
     """
     message = model.Message(username_last_player=self.username)
     try:
         self.sock.sendall(
             message.marshal())  # шлем сообщение через сокет серверу
     except (ConnectionAbortedError, ConnectionResetError):
         if not self.closing:
             self.ui.alert(messages.ERROR, messages.CONNECTION_ERROR)
Beispiel #30
0
 def receive(self):
     """
     Метод, в котором с помощью receive_all мы получаем объект класса message, внутри которого лежат нужные
     нам данные. В конце метода вызывается метод show_message(message), определенный внутри класса UI
     """
     while True:
         try:
             message = model.Message(**json.loads(self.receive_all()))
         except (ConnectionAbortedError, ConnectionResetError):
             if not self.closing:
                 self.ui.alert(messages.ERROR, messages.CONNECTION_ERROR)
             return
         self.ui.show_message(message)