суббота, 28 ноября 2015 г.

Linux + Debian Установка SVN - Сервера.

Соб-но начнем:
$ sudo apt-get install subversion libapache2-svnvv

#Создаем репозитарий:
sudo mkdir /var/svn
sudo chown -R www-data:www-data /var/svn

#Редактируем DAV_SVN
$ sudo nano /etc/apache2/mods-available/dav_svn.conf
<Location /svn>
DAV svn
SVNParentPath /var/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /etc/apache2/dav_svn.passwd
Require valid-user
#SSLRequireSSL # this line must be added if you want SSL enabled
</Location>

среда, 14 октября 2015 г.

G0Chat.

Появилась возможность затестить работу чата, для этого следует скачать:
https://onedrive.live.com/redir?resid=458866D0CB1B0F7..
В поле соединение указать IP : 95.129.236.162 и порт 5433, зарегистрироваться и юазать.


Основное :
[+] Поддержка передачи файлов.
[+] Постинг картинок.
[+] Статусы.
[+] Звуки.
[+] Смайлы
[+] Поддержка истории уведомлений, (когда пользователь выходит с чата)

Скачать

Добавление Manifest В QT

Для добавления манифеста к exe-файлу требуется выполнить следующее:
Создать файл манифеста:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="False"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>
 Запустить Command Promt Visual Studio с правами администратора.
 Собрать приложение (Release Build).
 Положить в папку с вашим приложением манифест.
 В Command Promt Перейти в эту папку: cd; * cd /D :X - где X Номер диска.
 Выполнить
 mt.exe -manifest manifest.xml -outputresource:clientApp.exe;1
 Если все пройдет успешно появится сообщение в окне консоли:
Microsoft (R) Manifest Tool version 5.2.3790.2076
Copyright (c) Microsoft Corporation 2005.
All rights reserved.

четверг, 3 сентября 2015 г.

Winsock WSAEWOULDBLOCK

WSAEWOULDBLOCK  – возникает в результате когда принимающая сторона не успевает обработать буфер данных. Решить проблему можно, отлавливая событие FD_WRITE; Наиболее опасная ситуация возникает на стороне сервера. Например, рассмотрим такой код на стороне сервера:
bool WriteData(SOCKET hSocket, char * cbBuff, int nSize)
{

       int  MaxByteSend = nSize;
       int  Offset = 0;
       int  nError = 0;

       do
       {
             nError = send(hSocket, cbBuff + Offset, MaxByteSend, 0);

             if(nError <= 0)
             {
                    nError = WSAGetLastError();

                    if(nError == WSAEWOULDBLOCK)
                    {
                           printf("WriteData WSAEWOULDBLOCK\r\n");
                           continue;
                    }
                    else return false;

             }

             if(nError > 0)
             {
                    Offset += nError;
                    MaxByteSend -= nError;
             }

       } while(nError > 0 && MaxByteSend != 0);

        return Offset == nSize ? true : false;
}

На 1-ый взгляд не каких проблем, если возникает событие WSAEWOULDBLOCK то мы просто пробуем еще раз отправить данные. Но в этом-то и заключается вся суть проблемы! Во 1-ых сторона клиента может в этот момент не принимать данные, а обрабатывать предыдущую порцию. Сервер же будет золочен на срок, пока клиент не примет буфер!  Как способ выхода из данной ситуации, можно ввести переменную nTryCount = 0; и если мы получаем WSAEWOULDBLOCK увеличиваем nTryCount++; когда количество таких, попыток подряд достигнет N(например 3), завершаем процедуру отправки с кодом неудачи!...Далее когда SOCKET будет готов читать данные, мы получим событие FD_WRITE. И дошлем остальную часть буфера!

Второе решение проблемы это использовать полностью асинхронные сокеты.

среда, 26 августа 2015 г.

TortoiseSVN + Icon + Windows10 Пропали иконки

Решение:
 Запуск Regedit с правами администратора.
1)
Перейти:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers
Удалить все ключи где есть : TortoiseXXX.
2) Качаем Клиент TortoiseSVN
Переустанавливаем.
3) Перезагружаемся
4) Открываем Диспетчер Задач Windows.
Убиваем процесс "Проводник"
В Диспетчере задача Файл->Новая Задача->explorer.exe
???
Profit!

вторник, 25 августа 2015 г.

QWebView + JavaScript + Event.

Иногда при работе с QWebView, требуется встроить возможность обрабатывать сообщения(Event’ы) непосредственно от JavaScipt’ов. При этом в качестве отправителя сообщения могут выступать кнопки, либо другие элементы.
Так как же реагировать на события от JavaScript?


Следующий пример, покажет как обработать event в QWebView от кнопки.
Нам потребуется непосредственно сам класс обработчик:
#ifndef JAVASCIPT_H
#define JAVASCIPT_H
#include <QObject>
class CJavaScipt : public QObject
{
  Q_OBJECT
public:
  explicit CJavaScipt(QObject *parent = 0);
  ~CJavaScipt();
static CJavaScipt * GetInstance();
signals:
public slots:
/* Метод который будет получать управление, когда мы будем нажимать на кнопку в QWebView */
  void OnButtonFileSaveClick(QString szSrcStr);
};
#endif // JAVASCIPT_H


Реализация..
CJavaScipt * CJavaScipt::GetInstance()
{
  static CJavaScipt JavaScipt;
  return &JavaScipt;
}

void CJavaScipt::OnButtonFileSaveClick(QString szSrcStr)
{
   qDebug() << "Called! Event!" << szSrcStr.toStdString().c_str();
}


Теперь нам надо вызвать метод QWebView, чтобы зарегистрировать нашь обработчик: