Example #1
0
class TcpConnection(object):
    def __init__(self, loop, socket, peeraddr):
        self.loop_ = loop
        self.socket_ = Socket(socket)
        self.peeraddr_ = peeraddr
        self.events_ = Events(self.socket_.getSocketFd(), kEevntRead)
        self.handle_ = Handle(self.events_)
        self.recvBuffer_ = ''
        self.writeBuffer_ = ''
        self.messageCb_ = defMessageCallback

    def tcpConnectionHandRead(self, reventFd, reventMask):
        assert reventFd == self.socket_.getSocketFd()
        data = ''
        length = 30
        while True:
            try:
                data = self.socket_.recv(length)
            except error, e:
                if e.errno == errno.EAGAIN:
                    break
            if len(data) == 0:
                self.loop_.delHandle(self.handle_)
                self.recvBuffer_ = ''
                break
            else:
                self.recvBuffer_ += data
        if len(self.recvBuffer_) != 0:
            self.messageCb_(self, self.recvBuffer_)
            self.recvBuffer_ = ''
Example #2
0
class TcpServer(object):
    def __init__(self, loop):
        self.loop_ = loop
        self.serversd_ = Socket()
        self.serversd_.bind()
        self.serversd_.listen(100)
        self.conns_ = {}
        self.events_ = Events(self.serversd_.getSocketFd(), kEevntRead)
        self.handle_ = Handle(self.events_, self.serverReadCb)
        self.loop_.addHandle(self.handle_)
        self.messageCb_ = defMessageCallback

    def initNewConn(self, acceptRet):
        print "initNewConn"
        client = acceptRet[0]
        peeraddr = acceptRet[1]

        conn = TcpConnection(self.loop_, client, peeraddr)
        conn.setMessageCallback(self.messageCb_)

        conn.connectionInit()

        self.conns_[client.fileno()] = conn

    def setMessageCallback(self, messagecb=defMessageCallback):
        self.messageCb_ = messagecb

    def serverReadCb(self, reventFd, reventMask):
        print "serverReadCb"
        assert reventFd == self.serversd_.getSocketFd()

        #(socket object, address info)
        newconn = self.serversd_.accept()
        self.initNewConn(newconn)