Code Monkey home page Code Monkey logo

binc's People

Contributors

neomer avatar

Watchers

 avatar  avatar

binc's Issues

Создать работу с блокчейном

Работа с блокчейном

  • Описание модели блока
  • Обмен блоками
  • Подпись блока с помощью хэш-сумм
  • Сохранение блока в базу данных

Унифицировать исключения

Создать класс class BaseException : public std::exception и унаследовать все исключения, которые в данных момент наследуются от std::exception на этот класс. Добавить в нем поддержку и корректное отображение QString.

Создать класс class TextProcessingException : public BaseException расширение с возможностью указания номера строки/символа вызвавшего исключение.

Провести рефакторинг кода и убрать всю работы напрямую с std::exception на работу через указанные выше классы.

Рефакторинг. Перевести работу с идентификаторами на интерфейс IIdentifyed

Внутри #42 появляется интерфейс #include <core/IIdentifyed.h>, который представляет собой консолидацию методов для работы с сущностями имеющими идентификатор : Guid.

В связи с этим необходимо провести рефакторинг кода и унаследовать все подходящие под определение сущности от этого интерфейса.

Проверка на валидность запроса

Добавлено при #29
В методе void AbstractHTTPRequest::parse(QByteArray data) выполняется проверка валидности HTTP запроса с помощью регулярного выражения

if (httpReqValidator.indexIn(sData.left(sData.indexOf('\n'))) == -1)
{
    throw HTTPParsingException(0, "Data is not valid HTTP request!");
}

возможен вариант, когда запрос не является HTTP запросом, а строка будет передана в теле сообщения для обхода этой валидации.

Возможное решение проблемы - запоминать индекс первого вхождения регулярного выражения и отбрасывать всю информацию до этого вхождения.

Унифицировать работу с HTTP протоколом

Сделать базовый абстрактный класс IMessageWithHeaders
Класс должен содержать виртуальный метод для статусной строки, реализовывать который должны потомки.
В нем же реализовать следующие методы
IMessageWithHeaders::compile(),
IMessageWithHeaders::compileHeaders(),
IMessageWithHeaders::setHeader(QString, QString),
IMessageWithHeaders::header(QString)

Унаследовать классы HTTPRequest, HTTPreponse от этого класса, выпилить весь повторяющийся код.

Реализация коммуникаций через TCP протокол

Приложение как клиент должно

  • Корректно выполнять подключение к ноде.
  • С помощью HTTP-протокола выполнить запрос актуальной информации об известных узлах.
  • Выполнить подключение по полученному списку к максимально возможному количеству узлов (ограничение на количество брать из настроек)

Приложение как сервер должно

  • При запуске встать на прослушивание указанного в настройках порта, ожидая подключение к нему по протоколу HTTP.

  • Парсить HTTP-запрос.

  • При подключении и запросе списка узлов выдавать все известные активные(?) узлы.

Версия HTTP протокола

В классах работы с HTTP проверить где версия http прописана константой. Вместо этого необходимо использовать IHTTPMessage::getVersion()

Реализовать функционал работы с большими пакетами

В класс IDataBlock и всем его наследникам реализовать возможность работы с блоками данных разбитыми на несколько пакетов.

Возможно ввести еще 1 слой абстракции, который бы разбивал IDataBlock на несколько сетевых пакетов.

Ошибка парсинга HTTP-ответа

в void INetMessageWithHeaders::parse(QString data) при парсинге происходит ошибка определения конца блока заголовков.
Парсинг идет до тех пор, пока в сообщении есть \r\n, при этом не отрабатывает двойной перенос каретки и тело сообщение воспринимается как заголовок, если в нем присутствует символ ":".

HTTPClient удалить экземпляр QTcpSocket

В функции
HTTPResponse HTTPClient::get(QUrl url)
Есть инициализация QTcpSocket *socket = new QTcpSocket(); добавить удаление, так как потенциально приводит к утечке памяти.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.