Exemplo n.º 1
0
def main():
    # main function
    kafkaClient = None
    tcpServer = None

    try:
        if confBox.getKafkaServerAddress(
        ) != "" and confBox.getKafkaServerPort() != 0:
            kafkaClient = KafkaClient(confBox.getKafkaServerAddress(),
                                      confBox.getKafkaServerPort(),
                                      confBox.getKafkaServerTopic())
            kafkaClient.start()
        if confBox.getTcpServerAddress() != "" and confBox.getTcpServerPort(
        ) != 0:
            tcpServer = TcpServer( confBox.getTcpServerAddress(), \
                confBox.getTcpServerPort() )
            tcpServer.start()
    except Exception as e:
        logger.error(e)
        if kafkaClient != None:
            kafkaClient.stop()
        if tcpServer != None:
            tcpServer.stop()
        sys.exit(1)

    if kafkaClient != None:
        kafkaClient.join()
    if tcpServer != None:
        tcpServer.join()
Exemplo n.º 2
0
class Server(Thread):
    def __init__(self, port=1234, clear_users=True):
        Thread.__init__(self)
        self.users = []
        self.active_users = {}
        self.tcp_server = TcpServer(port, self)
        self.tcp_server.start()
        self.is_listening = True
        self.accepted_img_formats = ['png', 'jpg', 'jpeg']
        try:
            os.mkdir('users')
        except FileExistsError:
            if clear_users:
                shutil.rmtree('users')
                os.mkdir('users')

    def run(self):
        while self.is_listening:
            pass
        self.tcp_server.is_listening = False

    def get_user_by_id(self, user_id):
        if user_id >= len(self.users):
            raise exception.NonExistingUser
        return self.users[user_id]

    def get_post_by_id(self, post_id):
        user = self.get_user_by_id(int(post_id / lpn))
        if post_id % lpn >= len(user.posts):
            raise exception.NonExistingPost
        return user.posts[post_id % lpn]

    def generate_salt(self, string_length=10):
        components = string.ascii_letters + string.digits + string.punctuation
        ans = ''
        for i in range(string_length):
            ans = ans + random.choice(components)
        return ans

    def register(self, username, password):
        for user in self.users:
            if user.username == username:
                raise exception.UsedUsername
        new_user = User(username, password, len(self.users), self)
        self.users.append(new_user)

    def login(self, username, password, ip):
        for user in self.users:
            if user.username == username:
                if user.generate_hash(password) == user.password_hash:
                    self.active_users[ip] = user
                    return
                raise exception.IncorrectLogin
        raise exception.IncorrectLogin

    def like(self, post_id, ip):
        if ip not in self.active_users:
            raise exception.NotLoggedIn
        self.active_users[ip].like(post_id)

    def send_friend_request(self, ip, target_id):
        if ip not in self.active_users:
            raise exception.NotLoggedIn
        self.active_users[ip].send_friend_request(target_id)

    def accept_friend_request(self, ip, fr_index):
        if ip not in self.active_users:
            raise exception.NotLoggedIn
        self.active_users[ip].accept_friend_request(fr_index)

    def deny_friend_request(self, ip, fr_index):
        if ip not in self.active_users:
            raise exception.NotLoggedIn
        self.active_users[ip].deny_friend_request(fr_index)

    def begin_post(self, caption, file_format, addr):
        ip = addr[0]
        if ip not in self.active_users:
            raise exception.NotLoggedIn
        if file_format not in self.accepted_img_formats:
            raise exception.NotSupportedFormat
        return self.active_users[ip].begin_post(caption, file_format, addr)

    def request_post(self, number, addr):
        ip = addr[0]
        if ip not in self.active_users:
            raise exception.NotLoggedIn
        return self.active_users[ip].request_post(number, addr)

    def number_of_posts(self, ip):
        if ip not in self.active_users:
            raise exception.NotLoggedIn
        return self.active_users[ip].number_of_posts()

    def number_of_friend_requests(self, ip):
        if ip not in self.active_users:
            raise exception.NotLoggedIn
        return self.active_users[ip].number_of_friend_requests()

    def get_fr(self, position, ip):
        if ip not in self.active_users:
            raise exception.NotLoggedIn
        return self.active_users[ip].get_fr(position)