Module pantools.ClientConnection

Expand source code
import threading
import time,logging, sys, os
import socket
import pickle
from _thread import *
from pantools.net import announce_service, wait_for_announcement

from .logger import logger
from .send_recv import recv_dict, recv_size
#from .TCPServer import TCPServer

class ClientConnection:
    """ server is a TCPServer """
    def __init__(self, sock: socket, server) -> None:
        self.sock = sock
        self.server = server
        self.hostname = "unknown"
        self.hosttype = "unknown"

        self.filenum = 0

    def start_reader(self):    
        start_new_thread(self.read_thread, ())

    def getPeerName(self):
        return self.sock.getpeername()

    def getSocket(self) -> socket:
        return self.sock

    def set_hostname(self, hostname) -> None:
        self.hostname = hostname

    def get_hostname(self) -> str:
        return self.hostname

    def set_type(self, hosttype) -> None:
        self.hosttype = hosttype

    def get_type(self) -> str:
        return self.hosttype

    def get_id(self) -> str:
        return f"{self.hostname} : {self.hosttype}"

    def save_buffer(self, buf: bytes):
        self.filenum=self.filenum+1
        filename = f"image-file-{self.filenum}.pkl"
        with open(filename, "wb") as mypicklefile:
            pickle.dump(buf, mypicklefile)

    #
    # Thread started for each connection!
    #
    def read_thread(self):

        logger.debug("Starting thread for socket {}".format(self.sock))
        srcaddr, srcport = self.sock.getpeername()

        logger.debug("Startar recv_size() loop")
        while True:
            buf = bytes()
            try:
                #obj = recv_dict(self.sock)
                buf = recv_size(self.sock)
                self.save_buffer(buf)

                logger.debug(f"Size of raw data:{len(buf)}")
                obj = pickle.loads(buf)
                logger.debug(f"Size of unpickled data:{len(obj)}")

            except Exception as e:
                logger.error(str(e))
                logger.info("Exception when reading incoming message! Closing connection!")

                self.save_buffer(buf)
                #TEMPORARILY DISABLED
                self.server.read_exception(self, e)
                self.sock.close()
                return # close thread!

Classes

class ClientConnection (sock: , server)

server is a TCPServer

Expand source code
class ClientConnection:
    """ server is a TCPServer """
    def __init__(self, sock: socket, server) -> None:
        self.sock = sock
        self.server = server
        self.hostname = "unknown"
        self.hosttype = "unknown"

        self.filenum = 0

    def start_reader(self):    
        start_new_thread(self.read_thread, ())

    def getPeerName(self):
        return self.sock.getpeername()

    def getSocket(self) -> socket:
        return self.sock

    def set_hostname(self, hostname) -> None:
        self.hostname = hostname

    def get_hostname(self) -> str:
        return self.hostname

    def set_type(self, hosttype) -> None:
        self.hosttype = hosttype

    def get_type(self) -> str:
        return self.hosttype

    def get_id(self) -> str:
        return f"{self.hostname} : {self.hosttype}"

    def save_buffer(self, buf: bytes):
        self.filenum=self.filenum+1
        filename = f"image-file-{self.filenum}.pkl"
        with open(filename, "wb") as mypicklefile:
            pickle.dump(buf, mypicklefile)

    #
    # Thread started for each connection!
    #
    def read_thread(self):

        logger.debug("Starting thread for socket {}".format(self.sock))
        srcaddr, srcport = self.sock.getpeername()

        logger.debug("Startar recv_size() loop")
        while True:
            buf = bytes()
            try:
                #obj = recv_dict(self.sock)
                buf = recv_size(self.sock)
                self.save_buffer(buf)

                logger.debug(f"Size of raw data:{len(buf)}")
                obj = pickle.loads(buf)
                logger.debug(f"Size of unpickled data:{len(obj)}")

            except Exception as e:
                logger.error(str(e))
                logger.info("Exception when reading incoming message! Closing connection!")

                self.save_buffer(buf)
                #TEMPORARILY DISABLED
                self.server.read_exception(self, e)
                self.sock.close()
                return # close thread!

Methods

def getPeerName(self)
Expand source code
def getPeerName(self):
    return self.sock.getpeername()
def getSocket(self) ‑> 
Expand source code
def getSocket(self) -> socket:
    return self.sock
def get_hostname(self) ‑> str
Expand source code
def get_hostname(self) -> str:
    return self.hostname
def get_id(self) ‑> str
Expand source code
def get_id(self) -> str:
    return f"{self.hostname} : {self.hosttype}"
def get_type(self) ‑> str
Expand source code
def get_type(self) -> str:
    return self.hosttype
def read_thread(self)
Expand source code
def read_thread(self):

    logger.debug("Starting thread for socket {}".format(self.sock))
    srcaddr, srcport = self.sock.getpeername()

    logger.debug("Startar recv_size() loop")
    while True:
        buf = bytes()
        try:
            #obj = recv_dict(self.sock)
            buf = recv_size(self.sock)
            self.save_buffer(buf)

            logger.debug(f"Size of raw data:{len(buf)}")
            obj = pickle.loads(buf)
            logger.debug(f"Size of unpickled data:{len(obj)}")

        except Exception as e:
            logger.error(str(e))
            logger.info("Exception when reading incoming message! Closing connection!")

            self.save_buffer(buf)
            #TEMPORARILY DISABLED
            self.server.read_exception(self, e)
            self.sock.close()
            return # close thread!
def save_buffer(self, buf: bytes)
Expand source code
def save_buffer(self, buf: bytes):
    self.filenum=self.filenum+1
    filename = f"image-file-{self.filenum}.pkl"
    with open(filename, "wb") as mypicklefile:
        pickle.dump(buf, mypicklefile)
def set_hostname(self, hostname) ‑> NoneType
Expand source code
def set_hostname(self, hostname) -> None:
    self.hostname = hostname
def set_type(self, hosttype) ‑> NoneType
Expand source code
def set_type(self, hosttype) -> None:
    self.hosttype = hosttype
def start_reader(self)
Expand source code
def start_reader(self):    
    start_new_thread(self.read_thread, ())