Пример #1
0
Widget::Widget(QWidget *parent) :QWidget(parent)
{
//    obj = new EPObject(0);
    QPushButton* btn = new QPushButton("xkd",this);
    connect(btn,SIGNAL(clicked()),this,SLOT(slotBtn()));
    connect(this,SIGNAL(emitSignal()),&obj,SLOT(receiverSignal()),Qt::QueuedConnection);

    obj.moveToThread(&thread);

}
Пример #2
0
bool PhantomJSHandler::OnConsoleMessage(CefRefPtr<CefBrowser> browser, const CefString& message, const CefString& source, int line)
{
  if (!canEmitSignal(browser)) {
    auto shortSource = QFileInfo(QString::fromStdString(source)).fileName().toStdString();
    QMessageLogger(shortSource.c_str(), line, 0).debug() << message;
  } else {
    emitSignal(browser, QStringLiteral("onConsoleMessage"),
        {QString::fromStdString(message), QString::fromStdString(source), line});
  }
  return true;
}
QAccumulatingConnection::QAccumulatingConnection(const QObject* sender, const char* signal,
        const QObject* receiver, const char* slot, int emitInterval,
        EmitMode mode, QObject* parent)
: QObject(parent)
, emitInterval_(emitInterval)
, timerId_(0)
, emitMode_(mode)
{
    QObject::connect(sender, signal, this, SLOT(emitSignal()));
    QObject::connect(this, SIGNAL(signal()), receiver, slot);
}
Пример #4
0
void caCalc::setValue(double value)
{
    char asc[1024], format[20];
    int precision;
    if((precision = getPrecision()) >= 0) {
       sprintf(format, "%s.%dlf", "%", precision);
    } else {
       sprintf(format, "%s.%dle", "%", -precision);
    }
    sprintf(asc, format, value);

    setTextLine(QString(asc));

    // emit signal when requested
    if(thisEventSignal == onFirstChange) {
        if(!eventFired) emit emitSignal();
        eventFired = true;
    } else if(thisEventSignal == onAnyChange) {
        emit emitSignal();
    }
}
Пример #5
0
void PhantomJSHandler::OnLoadStart(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame)
{
  CEF_REQUIRE_UI_THREAD();

  qCDebug(handler) << browser->GetIdentifier() << frame->GetURL() << isMain(frame);

  // filter out events from sub frames
  if (!isMain(frame) || !canEmitSignal(browser) || !m_browsers.value(browser->GetIdentifier()).firstLoadFinished) {
    return;
  }

  emitSignal(browser, QStringLiteral("onLoadStarted"), {QString::fromStdString(frame->GetURL())});
}
Пример #6
0
// renyang - 每隔一段時間去判斷對方的狀況
void Receiver::checkConnection()
{
#ifdef REN_DEBUG
	qWarning("Receiver::checkConnection()");
#endif
	if (received)
	{
		// renyang - 當是waiting端(等待別人打電話過來的那一端), 持續響鈴
		emitSignal(SIGNAL_RINGREPLY);
	}
	if (connected)
	{
		// renyang - 若對方接受你的電話, 或是本地端接受對方電話, 則停止探查目前接收方的情況
		checkTimer->stop();
		// renyang - 送出訊息說對方接受電話啦
		emit connectedSignal();
	}
}
Пример #7
0
void PhantomJSHandler::handleLoadEnd(CefRefPtr<CefBrowser> browser, int statusCode, const CefString& url, bool success)
{
  qCDebug(handler) << browser->GetIdentifier() << statusCode << url << success;

  auto& browserInfo = m_browsers[browser->GetIdentifier()];
  if (!browserInfo.firstLoadFinished) {
    browserInfo.firstLoadFinished = true;
    return;
  }

  if (canEmitSignal(browser)) {
    emitSignal(browser, QStringLiteral("onLoadEnd"), {QString::fromStdString(url), success}, true);
  }

  while (auto callback = takeCallback(&m_waitForLoadedCallbacks, browser)) {
    if (success) {
      callback->Success(std::to_string(statusCode));
    } else {
      callback->Failure(statusCode, "Failed to load URL: " + url.ToString());
    }
  }
}
Пример #8
0
// renyang - 送出響鈴的封包
void Transmitter::sendRing()
{
#ifdef REN_DEBUG
	qWarning("Transmitter::sendRing()");
#endif
	if (ringing)
	{
		timer->start(RINGTIME, true);
		sendRingPacket();
		emitSignal(SIGNAL_RINGMESSAGE);
	}
	else
	{
		try
		{
			prepare();
		}
		catch (Error e)
		{
			emitError(e.getText());
		}
	}
}
Пример #9
0
// renyang-TODO - 加入IHU_SCTP的部分
// renyang - 當client端有傳送資料過來這裡時, 則會執行此函式
// renyang - 接收資料到這裡就算是結束了, 剩下的其它部分會處理
void Receiver::receive()
{
#ifdef REN_DEBUG
	qWarning("Receiver::receive()");
#endif
	struct sctp_sndrcvinfo sndrcvinfo;
	QString ip_from;
	struct sockaddr_in peer;
	socklen_t peerlen = sizeof(peer);
	int msg_flag;

	if (working)
	{
		int rlen = 0;
		
		switch(protocol)
		{
			// renyang - 把接收到的資料放到inputBuffer中
			case IHU_UDP:
				// renyang - 由udp的方式來接收資料
				// renyang - 限制資料一定是由ca這一個sockaddr傳送過來的
				rlen = ::recvfrom(s, inputBuffer, IN_BUFSIZE, 0, (struct sockaddr *)&ca, &calen);
				break;
			case IHU_TCP:
				// renyang - 由tcp的方式來接收資料
				// renyang - 這裡沒有用Qt的接收資料的方式
				// renyang - 還是用一般socket的使用方式
				rlen = ::recv(s, inputBuffer, IN_BUFSIZE, 0);
				break;
			case IHU_SCTP:
				qWarning("get some data from sctp");
				rlen = ::sctp_recvmsg(s,inputBuffer,IN_BUFSIZE,(struct sockaddr *) &peer,&peerlen,&sndrcvinfo,&msg_flag);
				if (msg_flag & MSG_NOTIFICATION) {
					emitSctpEvent(inputBuffer);
					return ;
				}
				qWarning("recv %d bytes",rlen);
				// renyang-modify - 當設定stream no為0表示是特殊的封包, 則不改變primary address
				qWarning("%d",sndrcvinfo.sinfo_stream);
				if (( sndrcvinfo.sinfo_stream != 0) && (primaddr != ::inet_ntoa(peer.sin_addr))) {
					// renyang - 當送過來的與之前送過來的位置不同, 則設定此address為primaddr
					primaddr = ::inet_ntoa(peer.sin_addr);
					qWarning(primaddr);
					emit setPrimaddrSignal(primaddr);
				}
				// renyang-modify - 通知某一個ip有收到資料
				emit SigAddressEvent(::inet_ntoa(peer.sin_addr),QString("RECVING"));
				break;
		}

		// renyang - 當接收字串長度大於0時, 表示有接收到資料
		if (rlen > 0)
		{
			// renyang - 用來記算接收的資料量(每次呼叫getBytes(), bytes會歸0)
			bytes += rlen;
			// renyang - 用來記錄接收的資料量(不會歸0)
			total += rlen;
			active = true;
			// renyang - 把接收到的資料inputBuffer放到streamBuffer中
			putData(inputBuffer, rlen);
		}
		else
		{
			// renyang - 當有資料送過來, 但是長度確沒有大於0,表示對方出現錯誤或是離開
			emitSignal(SIGNAL_FINISH);
		}
	}
}
Пример #10
0
KVSO_CLASS_FUNCTION(dateTimeEdit,dateChangedEvent)
{
	emitSignal("dateChanged",c);
	return true;
}
Пример #11
0
 void test_signal2()
 {
     dbustl::Message signal = createSignal("TestSignal2");
     signal << "Signal 2 string value" << -1;
     emitSignal(signal);
 };
Пример #12
0
KVSO_CLASS_FUNCTION(trayIcon,activatedEvent)
{
	emitSignal("activated",c,c->params());
	return true;
}
Пример #13
0
void Widget::sendSignal()
{
    emit emitSignal();
}
Пример #14
0
void threadSignalSlot::sendSignal()
{
    emit emitSignal();
}
Пример #15
0
// renyang-TODO - 加入Vedio的部分吧
// renyang - 分析這一個封包是什麼種類的封包
// renyang - 依不同的封包, 做不一樣的事情
bool Receiver::processPacket(Packet *p)
{
#ifdef REN_DEBUG
	qWarning("Receiver::processPacket(Packet *p)");
#endif
	switch (p->getInfo())
	{
		case IHU_INFO_CRYPTED_AUDIO:
			if (blowfish)
			{
				// renyang - 解碼
				p->decrypt(blowfish);
			}
			else
			{
				if (!nodecrypt)
				{
					emitSignal(SIGNAL_KEYREQUEST);
				}
				break;
			}
		case IHU_INFO_AUDIO:
			// renyang - 取出資料, 並且通知有新資料到
			if (p->getDataLen() > MIN_DATA_SIZE)
			{
				emit newAudioData(p->getData(), p->getDataLen());
			}
			connected = true;
			break;
		case IHU_INFO_NEW_KEY:
			if (p->getDataLen() > MIN_DATA_SIZE)
			{
				char *out;
				int len = rsa->decrypt(p->getData(), p->getDataLen(), &out);
				if (blowfish)
					delete blowfish;
				blowfish = new Blowfish(out, len);
				emitSignal(SIGNAL_NEWKEY);
				free(out);
			}
			break;
		case IHU_INFO_KEY_REQUEST:
			if (p->getDataLen() > MIN_DATA_SIZE)
			{
				rsa->setPeerPublicKey(p->getData(), p->getDataLen());
				emitSignal(SIGNAL_SENDNEWKEY);
			}
			break;
		case IHU_INFO_RING:
			if (p->getDataLen() > MIN_DATA_SIZE)
			{
				ihu_reply = true;
				QString tempName = p->getData(); 
				if (!tempName.isEmpty())
					callerName = tempName;
			}
			emit warning(QString("!! CALL from %1 (%2) !!").arg(getIp()).arg(getCallerName()));
			emitSignal(SIGNAL_RING);
			break;
		case IHU_INFO_ANSWER:
			// renyang - 對方答應接應電話啦
			connected = true;
		case IHU_INFO_RING_REPLY:
			// renyang - 對方還沒有要接通電話
			ihu_reply = true;
			if (p->getDataLen() > MIN_DATA_SIZE)
				callerName = p->getData();
			break;
		case IHU_INFO_ERROR:
			ihu_abort = true;
		case IHU_INFO_REFUSE:
			// renyang - 對方拒絕接通電話
			ihu_refuse = true;
		case IHU_INFO_CLOSE:
			emitSignal(SIGNAL_FINISH);
			break;
		case IHU_INFO_INIT:
			emitSignal(SIGNAL_INIT);
		case IHU_INFO_RESET:
			disableDecrypt();
			break;
		// renyang - 對方要求Image(影像)
		case IHU_INFO_VIDEO_REQUEST:
			emit requestImage();
			break;
		// renyang-modify - 要求對方影像失敗
		case IHU_INFO_VIDEO_ERROR:
			emit requestImageFail();
			break;
		case IHU_INFO_VIDEO:
			// renyang-modify - 接收到片斷的image, 把資料放到Call::RecvImage中
			if (p->getDataLen() > MIN_DATA_SIZE)
			{
				emit newVideoData(p->getData(), p->getDataLen());
			}
			connected = true;
			break;
		case IHU_INFO_VIDEO_NEXT:
			emit requestNextImage();
			break;
		case IHU_INFO_VIDEO_END:
			emit completeImage();
			break;
		case IHU_INFO_VIDEO_CONFIRM:
			// renyang-modify - 只是用來確認線路是否是通的
			break;

	}
	return true;
}
Пример #16
0
void caCalc::setValue(double value)
{
    char asc[MAX_STRING_LENGTH], format[20];
    int precision;
    if((precision = getPrecision()) >= 0) {
       sprintf(format, "%s.%dlf", "%", precision);
    } else {
       sprintf(format, "%s.%dle", "%", -precision);
    }
    snprintf(asc, MAX_STRING_LENGTH, format, value);

    setTextLine(QString(asc));

    // emit signal when requested
    if(thisEventSignal == onFirstChange) {
        if(!eventFired) {
            emit emitSignal((int) value);
            emit emitSignal(value);
            emit emitSignal((bool) value);
        }
        eventFired = true;
    } else if(thisEventSignal == onAnyChange) {
        emit emitSignal((int) value);
        emit emitSignal(value);
        emit emitSignal((bool) value);
    } else if(thisEventSignal == TriggerZeroToOne) {
        if((qRound(thisValue) == 0) && (qRound(value) == 1)) {
            emit emitSignal((int) value);
            emit emitSignal(value);
            emit emitSignal((bool) value);
        }
    } else if(thisEventSignal == TriggerOneToZero) {
        if((qRound(thisValue) == 1) && (qRound(value) == 0)) {
            emit emitSignal((int) value);
            emit emitSignal(value);
            emit emitSignal((bool) value);
        }
    }
    thisValue =value;
    //printf("%s emit change value %f\n", qasc(objectName()), value);
    // only in case of a change where no calculation takes places, will we update
    // the data container with the actual value
    if(thisCalc.trimmed().size() == 0) emit changeValue(value);
}
Пример #17
0
// renyang-TODO - 加入IHU_SCTP的部分
// renyang - 當client端有傳送資料過來這裡時, 則會執行此函式
// renyang - 接收資料到這裡就算是結束了, 剩下的其它部分會處理
void Receiver::receive()
{
#ifdef REN_DEBUG
	qWarning("Receiver::receive()");
#endif
	union sctp_notification *snp;
	struct sctp_sndrcvinfo sndrcvinfo;
	QString ip_from;
	struct sockaddr_in peer;
	socklen_t peerlen = sizeof(peer);
	int msg_flag;

	if (working)
	{
		int rlen = 0;
		
		switch(protocol)
		{
			// renyang - 把接收到的資料放到inputBuffer中
			case IHU_UDP:
				// renyang - 由udp的方式來接收資料
				// renyang - 限制資料一定是由ca這一個sockaddr傳送過來的
				rlen = ::recvfrom(s, inputBuffer, IN_BUFSIZE, 0, (struct sockaddr *)&ca, &calen);
				break;
			case IHU_TCP:
				// renyang - 由tcp的方式來接收資料
				// renyang - 這裡沒有用Qt的接收資料的方式
				// renyang - 還是用一般socket的使用方式
				rlen = ::recv(s, inputBuffer, IN_BUFSIZE, 0);
				break;
			case IHU_SCTP:
				qWarning("get some data from sctp");
				rlen = ::sctp_recvmsg(s,inputBuffer,IN_BUFSIZE,(struct sockaddr *) &peer,&peerlen,&sndrcvinfo,&msg_flag);
				if (msg_flag & MSG_NOTIFICATION) {
					snp = (union sctp_notification *) inputBuffer;
					if (snp->sn_header.sn_type == SCTP_SEND_FAILED)
						qWarning("Send Failed");
				}
				if (primaddr != ::inet_ntoa(peer.sin_addr)) {
					// renyang - 當送過來的與之前送過來的位置不同, 則設定此address為primaddr
					primaddr = ::inet_ntoa(peer.sin_addr);
					qWarning(primaddr);
					emit setPrimaddrSignal(primaddr);
				}
				break;
		}

		// renyang - 當接收字串長度大於0時, 表示有接收到資料
		if (rlen > 0)
		{
			bytes += rlen;
			total += rlen;
			active = true;
			// renyang - 把接收到的資料放到streamBuffer中
			putData(inputBuffer, rlen);
		}
		else
		{
			// renyang - 當有資料送過來, 但是長度確沒有大於0,表示對方出現錯誤或是離開
			emitSignal(SIGNAL_FINISH);
		}
	}
}
Пример #18
0
KVSO_CLASS_FUNCTION(trayIcon,messageClickedEvent)
{
	emitSignal("messageClicked",c,c->params());
	return true;
}
Пример #19
0
// renyang-TODO - 加入Vedio的部分吧
// renyang - 分析這一個封包是什麼種類的封包
bool Receiver::processPacket(Packet *p)
{
#ifdef REN_DEBUG
	qWarning("Receiver::processPacket(Packet *p)");
#endif
	switch (p->getInfo())
	{
		case IHU_INFO_CRYPTED_AUDIO:
			if (blowfish)
			{
				// renyang - 解碼
				p->decrypt(blowfish);
			}
			else
			{
				if (!nodecrypt)
				{
					emitSignal(SIGNAL_KEYREQUEST);
				}
				break;
			}
		case IHU_INFO_AUDIO:
			// renyang - 取出資料, 並且通知有新資料到
			if (p->getDataLen() > MIN_DATA_SIZE)
			{
				emit newAudioData(p->getData(), p->getDataLen());
			}
			connected = true;
			break;
		case IHU_INFO_NEW_KEY:
			if (p->getDataLen() > MIN_DATA_SIZE)
			{
				char *out;
				int len = rsa->decrypt(p->getData(), p->getDataLen(), &out);
				if (blowfish)
					delete blowfish;
				blowfish = new Blowfish(out, len);
				emitSignal(SIGNAL_NEWKEY);
				free(out);
			}
			break;
		case IHU_INFO_KEY_REQUEST:
			if (p->getDataLen() > MIN_DATA_SIZE)
			{
				rsa->setPeerPublicKey(p->getData(), p->getDataLen());
				emitSignal(SIGNAL_SENDNEWKEY);
			}
			break;
		case IHU_INFO_RING:
			if (p->getDataLen() > MIN_DATA_SIZE)
			{
				ihu_reply = true;
				QString tempName = p->getData(); 
				if (!tempName.isEmpty())
					callerName = tempName;
			}
			emit warning(QString("!! CALL from %1 (%2) !!").arg(getIp()).arg(getCallerName()));
			emitSignal(SIGNAL_RING);
			break;
		case IHU_INFO_ANSWER:
			connected = true;
		case IHU_INFO_RING_REPLY:
			ihu_reply = true;
			if (p->getDataLen() > MIN_DATA_SIZE)
				callerName = p->getData();
			break;
		case IHU_INFO_ERROR:
			ihu_abort = true;
		case IHU_INFO_REFUSE:
			ihu_refuse = true;
		case IHU_INFO_CLOSE:
			emitSignal(SIGNAL_FINISH);
			break;
		case IHU_INFO_INIT:
			emitSignal(SIGNAL_INIT);
		case IHU_INFO_RESET:
			disableDecrypt();
			break;
	}
	return true;
}