Program() { int r; r = socket1.init(); socket1.setPort(10000); socket1.bind(); socket1.setListener(this); }
ServiceManager::ServiceManager(uint32 _tcpAcptrSvcNum, uint32 _udpAcptrSvcNum, uint32 _sslAcptrSvcNum, uint32 _tcpSvcNum, uint32 _udpSvcNum, uint32 _sslSvcNum, uint32 _tcpAcptrThreadNum, uint32 _udpAcptrThreadNum, uint32 _sslAcptrThreadNum, uint32 _contextBase, uint32 _perClrTcpSktNum, uint32 _tcpSktClrNum, uint32 _perClrUdpSubSktNum, uint32 _udpSubSktClrNum, uint32 _perClrUdpSktNum, uint32 _udpSktClrNum, IFreeListShrPtr _packetFreeList, IPacketParserShrPtr _pktParser, bool _isIp4) : m_tcpAcptrSvcNum(_tcpAcptrSvcNum) , m_udpAcptrSvcNum(_udpAcptrSvcNum) , m_sslAcptrSvcNum(_sslAcptrSvcNum) , m_tcpSvcNum(_tcpSvcNum) , m_udpSvcNum(_udpSvcNum) , m_sslSvcNum(_sslSvcNum) , m_tcpAcptrThreadNum(_tcpAcptrThreadNum == 0 ? 1 : _tcpAcptrThreadNum) , m_udpAcptrThreadNum(_udpAcptrThreadNum == 0 ? 1 : _udpAcptrThreadNum) , m_sslAcptrThreadNum(_sslAcptrThreadNum == 0 ? 1 : _sslAcptrThreadNum) , m_perClrTcpSktNum(_perClrTcpSktNum == 0 ? 1 : _perClrTcpSktNum) , m_tcpSktClrNum(_tcpSktClrNum == 0 ? 1 : _tcpSktClrNum) , m_perClrUdpSubSktNum(_perClrUdpSubSktNum == 0 ? 1 : _perClrUdpSubSktNum) , m_udpSubSktClrNum(_udpSubSktClrNum == 0 ? 1 : _udpSubSktClrNum) , m_perClrUdpSktNum(_perClrUdpSktNum == 0 ? 1 : _perClrUdpSktNum) , m_udpSktClrNum(_udpSktClrNum == 0 ? 1 : _udpSktClrNum) , m_usingTcp(m_tcpAcptrSvcNum > 0 && m_tcpSvcNum > 0) , m_usingUdp(m_udpAcptrSvcNum > 0 && m_udpSvcNum > 0) , m_usingSSL(m_sslAcptrSvcNum > 0 && m_sslSvcNum > 0) , m_contexts(_contextBase) , m_netInfoMgr((m_tcpSvcNum+m_udpSvcNum+_contextBase)/3+1) , m_tcpAcptrSvcs(m_tcpAcptrSvcNum, NumChooser(0, (m_tcpAcptrSvcNum == 0 ? 1 : m_tcpAcptrSvcNum) - 1, 24249, false)) , m_sslAcptrSvcs(m_sslAcptrSvcNum, NumChooser(0, (m_sslAcptrSvcNum == 0 ? 1 : m_sslAcptrSvcNum) - 1, 21139, false)) , m_udpAcptrSvcs(m_udpAcptrSvcNum, NumChooser(0, (m_udpAcptrSvcNum == 0 ? 1 : m_udpAcptrSvcNum) - 1, 23449, false)) , m_tcpSvcs(m_tcpSvcNum, NumChooser(0, (m_tcpSvcNum == 0 ? 1 : m_tcpSvcNum) - 1, 14249, false)) , m_sslSvcs(m_sslSvcNum, NumChooser(0, (m_sslSvcNum == 0 ? 1 : m_sslSvcNum) - 1, 1222, false)) , m_udpSvcs(m_udpSvcNum, NumChooser(0, (m_udpSvcNum == 0 ? 1 : m_udpSvcNum) - 1, 54249, false)) , m_isIp4(_isIp4) , m_currMaxSnIndex(0) { if (_pktParser) { m_pktParser = _pktParser; } else { m_pktParser = IPacketParserShrPtr(new PacketParser); } m_contexts.setHash(); for (uint32 i=0; i<m_tcpAcptrSvcs.size(); ++i) { m_tcpAcptrSvcs[i] = new TcpAcceptorService(this, m_tcpAcptrThreadNum, m_isIp4); } for (uint32 i=0; i<m_sslAcptrSvcs.size(); ++i) { m_sslAcptrSvcs[i] = new SSLAcceptorService(this, m_sslAcptrThreadNum, m_isIp4); } for (uint32 i=0; i<m_udpAcptrSvcs.size(); ++i) { m_udpAcptrSvcs[i] = new UdpAcceptorService(this, m_udpAcptrThreadNum, m_isIp4); } for (uint32 i=0; i<m_tcpSvcs.size(); ++i) { m_tcpSvcs[i] = new TcpService(this, m_isIp4); } for (uint32 i=0; i<m_sslSvcs.size(); ++i) { m_sslSvcs[i] = new SSLService(this, m_isIp4); } for (uint32 i=0; i<m_udpSvcs.size(); ++i) { m_udpSvcs[i] = new UdpService(this, m_isIp4); } // create and init tcp socket free list IFreeListShrPtr tcpSktFl(new FreeList<TcpSocket>(m_tcpSktClrNum, m_perClrTcpSktNum)); uint32 maxTcpNum = m_tcpSktClrNum*m_perClrTcpSktNum; for (uint32 ix=0, i=0; (i<maxTcpNum && m_usingTcp); ++i) { ix = (m_currMaxSnIndex+i) % m_tcpSvcs.size(); TcpSocket* tcpSkt = (TcpSocket*)tcpSktFl->get(i); if (tcpSkt) tcpSkt->init(ISessionShrPtr(new Session(m_currMaxSnIndex+i, &m_netInfoMgr, m_currMaxSnIndex+i, m_pktParser->create())), m_tcpSvcs[ix], this); } sTcpSktFList.set(tcpSktFl); if (m_usingTcp) { m_currMaxSnIndex += maxTcpNum; } // create and init udp sub socket free list IFreeListShrPtr udpSubSktFl(new FreeList<UdpSubSocket>(m_udpSubSktClrNum, m_perClrUdpSubSktNum)); uint32 maxUdpSubNum = m_udpSubSktClrNum*m_perClrUdpSubSktNum; for (uint32 ix=0, i=0; (i<maxUdpSubNum && m_usingUdp); ++i) { ix = (m_currMaxSnIndex+i) % m_udpSvcs.size(); UdpSubSocket* udpSubSkt = (UdpSubSocket*)udpSubSktFl->get(i); if (udpSubSkt) udpSubSkt->init(ISessionShrPtr(new Session(m_currMaxSnIndex+i, &m_netInfoMgr, m_currMaxSnIndex+i, m_pktParser->create())), m_udpSvcs[ix], this, m_isIp4); } sUdpSubSktFList.set(udpSubSktFl); if (m_usingUdp) { m_currMaxSnIndex += maxUdpSubNum; } // create and init udp socket free list IFreeListShrPtr udpSktFl(new FreeList<UdpSocket>(m_udpSktClrNum, m_perClrUdpSktNum)); uint32 maxUdpNum = m_udpSktClrNum*m_perClrUdpSktNum; for (uint32 ix=0, i=0; (i<maxUdpNum && m_usingUdp); ++ix, ++i) { if (ix >= m_udpSvcs.size()) ix = 0; UdpSocket* udpSkt = (UdpSocket*)udpSktFl->get(i); if (udpSkt) udpSkt->init(m_udpSvcs[ix], 0, m_isIp4); } sUdpSktFList.set(udpSktFl); if (_packetFreeList) { sPkFList.set(_packetFreeList); } else { sPkFList.set(IFreeListShrPtr(new FreeList<NetPacket>(10, 100))); } }