void Client::setSocket(QTcpSocket *socket) { this->socket = socket; this->socket->setParent(this); socketIn.setDevice(socket); socketOut.setDevice(socket); connect(socket, SIGNAL(disconnected()), SLOT(onSocketDisconnected())); connect(socket, SIGNAL(disconnected()), SIGNAL(socketDisconnected())); connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(onSocketError(QAbstractSocket::SocketError))); connect(socket, SIGNAL(readyRead()), SLOT(onSocketReadyRead())); initiateHandshake(); resetHeartbeatTimer(); }
std::tr1::shared_ptr<Broadcast::BroadcastStream> Broadcast::establishSharedBroadcast(const Network::Address&addy, const UUID&name, const std::tr1::function<void(const std::tr1::weak_ptr<Broadcast::BroadcastStream>&, Network::Stream::ConnectionStatus, const std::string&reason)>& cb) { std::tr1::shared_ptr<Broadcast::BroadcastStream> retval; Network::Stream*newBroadcastStream=NULL; while(newBroadcastStream==NULL) { boost::lock_guard<boost::mutex>lok(*mUniqueLock); std::tr1::weak_ptr<Network::Stream>*weak_topLevelStream=&mTopLevelStreams[addy]; std::tr1::shared_ptr<Network::Stream> topLevelStream; if ((topLevelStream=weak_topLevelStream->lock())) { }else{ std::tr1::shared_ptr<Network::Stream> tlstemp(Network::StreamFactory::getSingleton().getDefaultConstructor()(mIOService)); (topLevelStream=tlstemp)->connect(addy, &Network::Stream::ignoreSubstreamCallback, &Network::Stream::ignoreConnectionStatus, &Network::Stream::ignoreBytesReceived); *weak_topLevelStream=tlstemp; } std::tr1::shared_ptr<Broadcast::BroadcastStream> bs(new BroadcastStream(topLevelStream,NULL)); std::tr1::shared_ptr<Broadcast::BroadcastStream> weak_bs(bs); retval=bs; newBroadcastStream=topLevelStream->clone(std::tr1::bind(&BroadcastStreamCallbacks::setBroadcastStreamCallbacksShared, weak_bs, cb, _1, _2)); if (newBroadcastStream){ *weak_topLevelStream=topLevelStream; }else { if (mTopLevelStreams.find(addy)!=mTopLevelStreams.end()) { mTopLevelStreams.erase(mTopLevelStreams.find(addy)); } SILOG(broadcast,warning,"Toplevel stream failed to clone for address "<<addy.getHostName()<<':'<<addy.getService()); } } if (retval) initiateHandshake(&*retval,addy,name); return retval; }