static list<accepting> insert(list<accepting> const & l, unsigned priority, list<action> const & p, expr const & a) { if (!l) { return to_list(accepting(priority, p, a)); } else if (priority <= head(l).get_prio()) { return cons(accepting(priority, p, a), l); } else { return cons(head(l), insert(tail(l), priority, p, a)); } }
parse_table parse_table::add_core(unsigned num, transition const * ts, expr const & a, unsigned priority, bool overload, buffer<action> & post_buffer) const { parse_table r(new cell(*m_ptr)); if (num == 0) { list<action> postponed = to_list(post_buffer); if (!overload) { r.m_ptr->m_accept = to_list(accepting(priority, postponed, a)); } else { auto new_accept = filter(r.m_ptr->m_accept, [&](accepting const & p) { return p.get_expr() != a || p.get_postponed() != postponed; }); r.m_ptr->m_accept = insert(new_accept, priority, postponed, a); } } else { list<pair<action, parse_table>> const * it = r.m_ptr->m_children.find(ts->get_token()); action const & ts_act = ts->get_action(); action_kind k = ts_act.kind(); if (k == action_kind::Exprs || k == action_kind::ScopedExpr) post_buffer.push_back(ts_act); list<pair<action, parse_table>> new_lst; if (it) { if (contains_equivalent_action(*it, ts_act)) { buffer<pair<action, parse_table>> tmp; to_buffer(*it, tmp); for (pair<action, parse_table> & p : tmp) { if (p.first.is_equivalent(ts_act)) { p.second = p.second.add_core(num-1, ts+1, a, priority, overload, post_buffer); break; } } new_lst = to_list(tmp); } else { // remove incompatible actions new_lst = filter(*it, [&](pair<action, parse_table> const & p) { return p.first.is_compatible(ts_act); }); parse_table new_child = parse_table().add_core(num-1, ts+1, a, priority, overload, post_buffer); new_lst = cons(mk_pair(ts_act, new_child), new_lst); } } else { parse_table new_child = parse_table().add_core(num-1, ts+1, a, priority, overload, post_buffer); new_lst = to_list(mk_pair(ts_act, new_child)); } r.m_ptr->m_children.insert(ts->get_token(), new_lst); } return r; }
void MainWindow::init(bool is_development) { //qApp->installEventFilter(this); setWindowTitle(settings->value("window_title").toString()); if (settings->value("minified_state").toString() == "true") { setWindowState(Qt::WindowMinimized); } this->setMinimumWidth(430); this->setMinimumHeight(430); webView = new QWebView(this); if (settings->value("context_menu").toString() == "false") { webView->setContextMenuPolicy(Qt::NoContextMenu); } this->setCentralWidget(webView); m_network_manager = new QNetworkAccessManager(this); QWebPage *webPage = webView->page(); webPage->setNetworkAccessManager(m_network_manager); webPage->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); connect(webPage, &QWebPage::linkClicked, this, &MainWindow::onLinkClicked); connect(webPage->mainFrame(), &QWebFrame::javaScriptWindowObjectCleared, this, &MainWindow::attachJsApi); webView->show(); bootstrap(is_development); // restore saved window geometry from .ini file QVariant size = settings->value("main_window_geometry"); if ( size.isNull() ) { this->setGeometry(QRect(500, 100, 700, 500)); } else { this->setGeometry(size.toRect()); } // restore saved zoom factor from .ini file qreal z = settings->value("zoom_factor").toReal(); if ( z ) webView->page()->mainFrame()->setZoomFactor(z); m_jsApi = new JsApi(this); optionsDialog = new OptionsDialog(this); optionsDialog->m_version = m_version; connect(optionsDialog, SIGNAL(accepting()), m_jsApi, SLOT(onOptionsDialogAccepted())); QShortcut *zoomin = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Plus), this); connect(zoomin, &QShortcut::activated, this, &MainWindow::onZoomIn); QShortcut *zoomout = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Minus), this); connect(zoomout, &QShortcut::activated, this, &MainWindow::onZoomOut); QShortcut *shutdown = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this); connect(shutdown, &QShortcut::activated, m_jsApi, &JsApi::shutdown); QWebSettings::setObjectCacheCapacities(0, 0, 0); if (settings->value("webinspector").toString() == "true") { QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); QWebInspector *inspector; inspector = new QWebInspector(); inspector->setPage(webView->page()); inspector->setGeometry(QRect(500, 10, 1000, 700)); inspector->show(); } QIcon icon = QIcon(application_path + "/" + APPNAME + ".png"); m_trayIcon = new QSystemTrayIcon(this); m_trayIcon->setIcon(icon); m_trayIcon->show(); connect(m_trayIcon, &QSystemTrayIcon::messageClicked, m_jsApi, &JsApi::onTrayMessageClicked); connect(m_trayIcon, &QSystemTrayIcon::activated, m_jsApi, &JsApi::onTrayIconActivated); }
void main(void){ WSADATA wsaData; SOCKET listeningSocket; SOCKET newConnection; struct sockaddr_in serverAddr, tempAddr; struct sockaddr_storage clientAddr; int clientAddrLen; int port = 5150; int returnValue, tempAddrLen; char dataBuffer[666], ansiBuffer[666]; // Инициализация Winsock версии 2.2 if ((returnValue = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0){ myprintf("WSAStartup ошибка %s\n", encodeWSAGetLastError(returnValue)); return; } /////////////////////////////////////////////////////////////////////////////////////////////////// // Создаём новый TCP сокет для приёма запросов на соединение от клиентов. listeningSocket = getSocket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Заполняем struct sockaddr_in serverAddr, которая скажет функции bind, что мы хотим // слушать соединения на всех интерфейсах (INADDR_ANY), используя порт 5150. // Мы преобразуем порядок байт из системного в сетевой (htons и htonl) serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(port); serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); // bind привязывает адресную информацию, определённую в serverAddr к сокету listeningSocket bindSocket(listeningSocket, serverAddr); // Сокет пасивный для прослушивания (приёма) TCP соединений. Длина очереди запросов на соединение = 5 setListen(listeningSocket, 5); tempAddrLen = sizeof(tempAddr); getsockname(listeningSocket, (struct sockaddr *)&tempAddr, &tempAddrLen); myprintf("Локальный адрес:%s и порт:%d \n", inet_ntoa(tempAddr.sin_addr), ntohs(tempAddr.sin_port)); tempAddrLen = sizeof(tempAddr); getpeername(listeningSocket, (struct sockaddr *)&tempAddr, &tempAddrLen); myprintf("Удалённый адрес:%s и порт:%d \n", inet_ntoa(tempAddr.sin_addr), ntohs(tempAddr.sin_port)); myprintf("Ожидаем соединение на порту %d.\n", port); // Принимаеи новое соединение, когда оно возникнет clientAddrLen = sizeof(clientAddr); clientAddr.__ss_align = 0; newConnection = accepting(listeningSocket, &clientAddr, clientAddrLen); getsockname(newConnection, (struct sockaddr *)&tempAddr, &tempAddrLen); myprintf("Локальный адрес:%s и порт:%d сокета сервера\n", inet_ntoa(tempAddr.sin_addr), ntohs(tempAddr.sin_port)); getpeername(newConnection, (struct sockaddr *)&tempAddr, &tempAddrLen); myprintf("Удаленный адрес:%s и порт:%d сокета клиента\n", inet_ntoa(tempAddr.sin_addr), ntohs(tempAddr.sin_port)); // Далее мы можем снова ожидать на сокете listeningSocket новые соединения снова вызывая accept // и/или начать передавать и принимать данные на сокете newConnection. // Для простоты остановим прослушивание, закрывая сокет listeningSocket. // Можно начнинать приём и предачу данных на сокете newConnection. closesocket(listeningSocket); myprintf("Ждём данные для получения..\n"); /*if ((returnValue = recv(newConnection, dataBuffer, sizeof(dataBuffer), 0)) == SOCKET_ERROR){ myprintf("Ошибка recv %s\n", encodeWSAGetLastError(WSAGetLastError())); closesocket(newConnection); WSACleanup(); exit(1); }*/ if ((returnValue = recv(newConnection, u1.c, sizeof(u1), 0)) == SOCKET_ERROR){ myprintf("Ошибка recv %s\n", encodeWSAGetLastError(WSAGetLastError())); closesocket(newConnection); WSACleanup(); exit(1); } // Делаем из полученных данных строку на С //dataBuffer[returnValue] = '\0'; //OemToChar(dataBuffer, ansiBuffer); int offset = 0, result1=1, result2=1; printf("%e", u1.d); //int operationIndex = switchOperation(ansiBuffer, &offset); /*if (operationIndex == -1){ myprintf("Получено %d байтов в сообщении %s\n", returnValue, ansiBuffer); myprintf("\nОбратная передача сообщения...\n"); returnValue = sendMessage(newConnection, ansiBuffer, strlen(ansiBuffer)); myprintf("Передано %d байтов.\n", returnValue); } else{ BOOL flagAnswer = FALSE; int answer = 0; myprintf("%s\n", ansiBuffer); switch (operationIndex) { case 0: myprintf("Принята команда <qs> на закрытие...\n"); break; case 1: if (getNumber(ansiBuffer, offset, &result1, &result2)) flagAnswer = TRUE; answer = result1 + result2; myprintf("%d\n", answer); break; case 2: if (getNumber(ansiBuffer, offset, &result1, &result2)) flagAnswer = TRUE; answer = result1 - result2; myprintf("%d\n", answer); break; case 3: if (getNumber(ansiBuffer, offset, &result1, &result2)) flagAnswer = TRUE; answer = result1 * result2; myprintf("%d\n", answer); break; case 4: if (getNumber(ansiBuffer, offset, &result1, &result2)) if (result2 != 0){ flagAnswer = TRUE; answer = result1 / result2; myprintf("%d\n", answer); }else myprintf("Деление на 0!\n"); break; default: break; } if (flagAnswer){ myprintf("\nОбратная передача сообщения...\n"); char temp[666]; _itoa_s(answer, temp, 666, 10); returnValue = sendMessage(newConnection, temp, strlen(temp)); myprintf("Передано %d байтов.\n", returnValue); } }*/ myprintf("Закрываем соединение с клиентом.\n"); closesocket(newConnection); WSACleanup(); system("pause"); }
void ObjectSimpleViewer:: addObject( WoolzObject * object, bool doViewAll, ObjectView *previousView) { if(accepting(object)) { ObjectView *view; view = Factory(this, object); //if object has no data or can not be visualised //then generate no view if(!view) { return; } views.append(view); if (object->isWarped()) { views_root_s->insertChild(view->getSceneGraph(true),0); } else { views_root_t->insertChild(view->getSceneGraph(true),0); } if(previousView) { view->setVisibility(previousView->getVisibility()); view->setTransparency(previousView->getTransparency()); } else { int transparency = initialTransparency(object); if(transparency != 100) { view->setVisibility(true); view->setTransparency(transparency); } else { view->setVisibility(false); view->setTransparency(0); } } connect(view, SIGNAL(viewPropertyChanged()), this, SLOT(viewPropertyChanged())); connect(view, SIGNAL(regerateView()), this, SLOT(regerateView())); emit addedView(view); if(m_viewAll) { m_viewer->viewAll(); if(doViewAll) { m_viewAll = false; } } } }