Передача текстового сообщения с отложенным чтением

Рейтинг: 0Ответов: 1Опубликовано: 11.05.2011

Здравствуйте, обитатели и просто очень умные люди с этого сайта. У меня возникла проблема с написанием кода на делфи ... не могу написать часть программы для передачи текстового сообщения с отложенным чтением. Сама программа клиента и сервера - я её написал ...

Ответы

▲ 3

на КЛИЕНТЕ описываем процедуру Send отправки сообщения Sender - тот, кто отправляет (например номер пользователя), Message - само сообщение

procedure Send(Sender : integer; Message : string); 
begin
    //отправка данных серверу 
    //например строка в таком формате:
    //"From=" + IntToStr(Sender) + "#Mes=" + Message;
end;

на СЕРВЕРЕ описываем процедуру Send отправки сообщения Receiver - тот, кто получет сообщение(например номер пользователя), Message - само сообщение

procedure Send(Receiver : integer; Message : string); 
begin
    //отправка данных клиенту
    //например строка в таком формате:
    //"To=" + IntToStr(Receiver) + "#Mes=" + Message;
end;

на СЕРВЕРЕ описываем функцию Accept получения сообщения Source и его обработки. она возврашает само сообщение и в аргумент From - номер пользователя-отправителя

function Accept(Source : string; var From : integer) : string;
begin
    //получение текста сообщения и запись его в Source например из Socket.
    From := copy(Source, 6, pos('#', Source) - 6);
    delete(Source, 1, pos('#', Source) + 4); //+4 - нужно игнорировать "Mes=" и символ "#" - разделитель и всё что до него
    Result := Source;
end;

на КЛИЕНТЕ

процедура, которая выполняется сразу после входа в чат (или что у Вас там?) UserId - идентификационный номер пользователя:

procedure Init(UserId : integer);
begin
    Send(UserId, "loggedIn"); //процедура осведомляет сервер, чот пользователь он-лайн
end;

процедура обработки полученного сообщения на СЕРВЕРЕ

procedure ProcessRequest(From : integer; Message : string);
begin
    if (Message = "loggedIn") then begin
        //сканирование папки с временными файлами - сообщениями для пользователя From. **n** - количество сообщений. запись сообщений в массив messages
        for i := 1 to n do begin
             Send(From, messages[i]);
        end;
    end else
    .... //другие случаи отправленных сообщений
end;

ну а КЛИЕНТ получает сообщения от сервера как обычно (ничего модифицировать не надо).