Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Обсуждение статей
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2009, 19:29   #221
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
Ну, здрасте... ))) Если нужно отобразить строчку, а ее части это TempName и TempText, то как угодно, паровозом их через знак сложения:
Код:
Memo1.Lines.Add(TempName+TempText);
Можно еще что-то вставить, если нужно.
Я имел ввиду отображение приватного соообщения, с простым разобрался с вашей помощью.
вот эта строка меня запутала
Код:
RVChat.AddText(Copy(text,3+Length(Form2.ENick.Text),len-Length(Form2.ENick.Text)-1),10);
Вот что получается при получении лички
Код:
RVChat.AddTextFromNewLine('>> ',10);
RVChat.AddText('['+TimeToStr(Now)+'] ',1);
//Записываем имя и увеличиваем значение счетчика
//MasL.Add(TempName);
RVChat.AddText(Copy(text,3+Length(Form2.ENick.Text),len-Length(Form2.ENick.Text)-1),10);
RVChat.Format;
>> [19:22:23] СерверЂ: (приват) Привет (Тут пока не задействованы TempName с TempText)

Вот что получается с TempName
Код:
RVChat.AddTextFromNewLine('>> ',10);
RVChat.AddText('['+TimeToStr(Now)+'] ',1);
RVChat.AddText(TempName,3);
//Записываем имя и увеличиваем значение счетчика
MasL.Add(TempName);
RVChat.AddText(Copy(text,3+Length(Form2.ENick.Text),len-Length(Form2.ENick.Text)-1),10);
RVChat.Format;
>> [19:27:27] Клиент˜СерверСерверЂ: (приват) Привет

С TempName и TempText вообще труба.

Последний раз редактировалось Shouldercannon; 22.06.2009 в 20:01.
Shouldercannon вне форума Ответить с цитированием
Старый 22.06.2009, 20:24   #222
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Нужно выбросить вообще вот это:
Код:
RVChat.AddText(Copy(text,3+Length(Form2.ENick.Text),len-Length(Form2.ENick.Text)-1),10);
Оно не нужно, раз уже код нам дал ник пиватного отправителя и содержимое текста сообщения. Пишем так:
Код:
With RVChat do
  Begin
    Lines.Add('');
    SelAttributes.Name := 'название шрифта (String)';
    SelAttributes.Size  := 'размер шрифта (Integer)';
    SelAttributes.Color := 'цвет текста (TColor)';
    SelAttributes.Style := 'стиль [fsBold,fsItalic,...]';
    SelText := TempPrivatName;

    // следующая часть
    SelAttributes.Name := 'название шрифта (String)';
    SelAttributes.Size  := 'размер шрифта (Integer)';
    SelAttributes.Color := 'цвет текста (TColor)';
    SelAttributes.Style := 'стиль [fsBold,fsItalic,...]';
    SelText := TempName;

    // следующая часть
    SelAttributes.Name := 'название шрифта (String)';
    SelAttributes.Size  := 'размер шрифта (Integer)';
    SelAttributes.Color := 'цвет текста (TColor)';
    SelAttributes.Style := 'стиль [fsBold,fsItalic,...]';
    SelText := TempText;
  end;
По-моему совсем просто. Если нужен отступ, нужно вставить пробел после переменной, например:
Код:
SelText := TempName+' ';
...следующие символы не слипнутся с предыдущими.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 22.06.2009, 21:04   #223
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
Нужно выбросить вообще вот это:
Код:
RVChat.AddText(Copy(text,3+Length(Form2.ENick.Text),len-Length(Form2.ENick.Text)-1),10);
Оно не нужно, раз уже код нам дал ник пиватного отправителя и содержимое текста сообщения. Пишем так:
Код:
With RVChat do
  Begin
    Lines.Add('');
    SelAttributes.Name := 'название шрифта (String)';
    SelAttributes.Size  := 'размер шрифта (Integer)';
    SelAttributes.Color := 'цвет текста (TColor)';
    SelAttributes.Style := 'стиль [fsBold,fsItalic,...]';
    SelText := TempPrivatName;

    // следующая часть
    SelAttributes.Name := 'название шрифта (String)';
    SelAttributes.Size  := 'размер шрифта (Integer)';
    SelAttributes.Color := 'цвет текста (TColor)';
    SelAttributes.Style := 'стиль [fsBold,fsItalic,...]';
    SelText := TempName;

    // следующая часть
    SelAttributes.Name := 'название шрифта (String)';
    SelAttributes.Size  := 'размер шрифта (Integer)';
    SelAttributes.Color := 'цвет текста (TColor)';
    SelAttributes.Style := 'стиль [fsBold,fsItalic,...]';
    SelText := TempText;
  end;
По-моему совсем просто. Если нужен отступ, нужно вставить пробел после переменной, например:
Код:
SelText := TempName+' ';
...следующие символы не слипнутся с предыдущими.
Хорошо. Избавился от
Код:
RVChat.AddText(Copy(text,3+Length(Form2.ENick.Text),len-Length(Form2.ENick.Text)-1),10);
и зделал так
Код:
RVChat.AddTextFromNewLine('>> ',10);
RVChat.AddText('['+TimeToStr(Now)+'] ',1);
RVChat.AddText(TempName,3);
//Записываем имя и увеличиваем значение счетчика
MasL.Add(TempName);
RVChat.AddText(TempText,10);
RVChat.Format;
Вот что получается на выходе
>> [21:00:52] Клиент˜Сервер: Клиент (приват) Привет

Тоесть кому предназначено (со спец. символом) и кто отправил слиплись. Кому предназначено не затерлось (кому предназначено сис. команда).

Последний раз редактировалось Shouldercannon; 22.06.2009 в 21:09.
Shouldercannon вне форума Ответить с цитированием
Старый 22.06.2009, 22:04   #224
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Если пакет шлется так:
Код:
ClientSocket.Socket.SendText('3'+addressee+Chr(152)+Form2.ENick.Text+Chr(128)+': '+MMessage.Text);
...то, тут два ключа Chr(152) и Chr(128), проверка у тебя идет только по Chr(128), ничего удивительного нет, что идет слипание.
Нужно два цикла проверки по разным ключам, в первом выдергивается отправитель, во втором - получатель. Лучше задавать один и тот же ключ в отправке, а циклы на стороне приема производить от нужной позиции, т.е. первый от начала, а второй от той, что была при сбросе первого цикла.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 22.06.2009 в 22:08.
Beermonza вне форума Ответить с цитированием
Старый 23.06.2009, 09:33   #225
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
Вот так:
Код:
procedure TForm1.FormDestroy(Sender: TObject);
begin
// проверка, программа в режиме клиента
  If ClientSocket.Active=True then
    Begin
      ClientSocket.Socket.SendText('0['+TimeToStr(Time)+': '+NikEdit.Text+' отключился');
    end;
end;
Пока код внутри не завершит свою работу, форма не выгрузится. Можно быть уверенным, сообщение дойдет до сервера.
Цитата:
Сообщение от Beermonza Посмотреть сообщение
Неужели вы думаете, что я дал вам нерабочий код? ))) ...смотрите внимательно где у вас закрывается сокет, ...может FormClose заполнен? ...в исходном виде, после нажатия красного крестика на форме, сервер видит сообщение отключившегося клиента, после чего обновляет список.
Да не работает, ради эксперемента создал новый проэкт где в OnClose и OnDestroy ничего нету, цепляю приведенный вами код, не работает...
По ходу форма быстрее закрывается и сообщение не успевает отправиться...

P.S. Клиент и серевер у меня разнесен (в разных приложениях), хоят, я думаю, это не имеет значения...
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 23.06.2009, 13:23   #226
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Столкнулся с таким косяком. Сервер стал часто тупить при обработке юзеров, вот что показывает
! .'. У60ЖЕСТ80 .'. !
1NSY11NSY
Cartman
Dj Fast`1Dj Fast`
jk1jk
KaT9I1KaT9I
kreker1kreker
Неизвестный
Неизвестный
Неизвестный
Неизвестный
Неизвестный
Неизвестный
Неизвестный
НЕКИТ1НЕКИТ
с чем это может быть связано?
P.S. При включении сервера они заходят все сразу (автопереподключение).
И может быть такое, что все одновременно доля секунды в долю секунды подключаются одновременно?
Shouldercannon вне форума Ответить с цитированием
Старый 23.06.2009, 19:07   #227
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

spirit-ua, такого просто быть не может. Окно не уничтожится, пока не завершится внутренний код, ...вы уверены что на стороне сервера у вас пакет принимается? Можно посмотреть на сервере код приема сообщения с ключом "0"?

Shouldercannon, сколько бы не подключилось клиентов, они находятся в своих каналах, сервер по-порядку проверяет все, и рассылает запрос на авторизацию. В том и фишка, что пакеты клиентов не теряются, они ждут своей очереди, лежат в буфере, пока сервер не проверит, а проверяет он с дискретностью таймера. Нужно искать ошибку в коде заполнения списка или массива, ...если не ошибаюсь, был код переплетенный со списком и массивом, кто у кого берет данные не совсем понятно, возможно ошибка там. Посчитайте сколько клиентов вначале - их 7, и после них неизвестных тоже 7, похоже на дублирование, и последний вроде вручную создан, да? ...нет?

Послесловие: ...возможно дыра все таки есть, посмотрю как будет время.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 23.06.2009 в 19:18.
Beermonza вне форума Ответить с цитированием
Старый 23.06.2009, 20:18   #228
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Похоже что действительно дублируются.
Цитата:
и последний вроде вручную создан, да? ...нет?
последний создан не вручную

Вот последняя забивка

! .'. У60ЖЕСТ80 .'. !
[AvP2C-SA]Shouldercannon
[GWB-A] -=|*PuNISHeR*|=-
[GWB-SA]Shouldercannon
Dj Fast`
Shok
Неизвестный
Неизвестный
Неизвестный
Неизвестный
Неизвестный
НЕКИТ

Последний раз редактировалось Shouldercannon; 24.06.2009 в 11:20.
Shouldercannon вне форума Ответить с цитированием
Старый 24.06.2009, 09:36   #229
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
spirit-ua, такого просто быть не может. Окно не уничтожится, пока не завершится внутренний код, ...вы уверены что на стороне сервера у вас пакет принимается? Можно посмотреть на сервере код приема сообщения с ключом "0"?
По кнопке ТОЧНО ТАКОЕ ЖЕ сообщение доходит, по Destroy не доходит, куда дальше смотреть???
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 24.06.2009, 16:26   #230
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от spirit-ua Посмотреть сообщение
По кнопке ТОЧНО ТАКОЕ ЖЕ сообщение доходит, по Destroy не доходит, куда дальше смотреть???
Самой последней строчкой в FormDestroy можно написать sleep(2000); - это затянет отключение на 2 секунды, и сообщение пролезет.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновление в блоге - Создание клиент-сервера Pblog Обсуждение статей 0 03.10.2007 17:12
обновление в блоге - Диплом. Создание и продвижение сайта - готовь сани летом, а дипл Pblog Обсуждение статей 0 31.08.2007 20:00
обновление в блоге - USB Холодильник Pblog Обсуждение статей 0 25.06.2007 14:13
обновление в блоге - О ярлыках Pblog Обсуждение статей 0 27.05.2007 03:17