Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Вниз

сетевая игра :)   Найти похожие ветки 

 
Станислав   (2005-09-04 23:06) [0]

Здраствуйте. Вот решил попробывать себя в разработке сетевой игры и сразу возникло пару вопросов:
1. как организовать процедуру логина игрока (со стороны сервера и клиента)
2. подскажите как лучше передавать данные (там в рекорде каком нибудь наверное, а не строкой %)... )

заранее спасибо!

p.s. использую синхронные сокеты tcp/ip (компоненты Indy)


 
Eraser ©   (2005-09-05 01:30) [1]

Станислав   (04.09.05 23:06)

1. Логин может быть только со стороны клиента, по определению.
2. Конечно лучше с пом. какой-то структуры.

p.s. использую синхронные сокеты tcp/ip (компоненты Indy)

вот это правильно.


 
Станислав   (2005-09-05 09:10) [2]

Вот собственно с помощью какой?... Например как лучше передать допустим координаты игрока в 2д пространстве?...

А под логином я подразумивал авторизацию игрока на сервере с помощью имени и пароля. Будет ли такой алгоритм правильным:

1. пользователь подключаеться к серверу
2. пользователь отправляет пакаеты с именем и паролем
3. если комбинация имя/пароль правильная, то допустим поменять флаг Authorized на true, а в противном случае disconnect();

p.s. такая структура наверное неверно составлена?

TMsg = record
     Command: byte;
     UserName: string[100];
     data: array of byte[1..1024];
end;


 
Digitman ©   (2005-09-05 09:24) [3]


> такая структура наверное неверно составлена?


а что это за структура ?
где она фигурирует в твоем протоколе инф.обмена между сервером и клиентом ?


 
Станислав   (2005-09-05 09:47) [4]

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

как в таком случае сервер будет правильно их получать если код приемы выглядит примерно так:

AThread.Connection.ReadBuffer (TMsg, SizeOf (TMsg));


 
Digitman ©   (2005-09-05 10:18) [5]

type

TCommands = (cmdLogin, cmdPoint, cmdPoints);

TCmdPrefix = packed record
 Command: TCommands;
 ParamSize: Integer;
end;

TCmdLogin = packed record
 UserName: string[16];
 Password: string[16];
end;

var
 CmdPrefix: TCmdPrefix;
 CmdLogin: TCmdLogin;
 CmdPoint: TPoint;
 CmdPoints: array of TPoint;
 cnt: Integer;
...
 AThread.Connection.ReadBuffer (CmdPrefix, SizeOf(CmdPrefix));
 case CmdPrefix.Command of
   cmdLogin: AThread.Connection.ReadBuffer(CmdLogin, SizeOf(CmdLogin));
   cmdPoint: AThread.Connection.ReadBuffer(CmdPoint, SizeOf(CmdPoint));
   cmdPoints:
     begin
       cnt := ParamSize div SizeOf(TPoint);
       SetLength(CmdPoints, cnt);
       AThread.Connection.ReadBuffer(PPoint(@CmdPoints[0])^, ParamSize);
     end;
 end;


 
Станислав   (2005-09-05 10:28) [6]

о великий Digitman :) Как все логично получилось! Спасибо огромное :)) Если есть свободное время - можно пообщаться в аське или по мылу! Идеи по созданию игры грандиозные, а людей всего 2 штуки...


 
Станислав   (2005-09-05 13:21) [7]

а вот если я буду использовать выше написанный код, то клиент будет посылать сначала TCmdPrefix, а след. строкой уже само сообщение?


 
Digitman ©   (2005-09-05 13:35) [8]


> Станислав   (05.09.05 13:21) [7]


да, разумеется


 
Signate ©   (2005-09-06 14:35) [9]

а еще вопрос...
в моем примере сервера одного клиента описывает следующая структура


 TClient   = record  // Object holding data of client (see events)
               DNS         : String[20];            { Hostname }
               Connected,                           { Time of connect }
               LastAction  : TDateTime;             { Time of last transaction }
               Thread      : Pointer;               { Pointer to thread }
             end;


стоит ли в эту структуру добавлять переменные типа : жизни игрока, его имени, etc... или стоит под это дело заводить отдельную структуру и добавлять ее в какой нибудь массив при коннекте клиента и удалять при дисконнекте?


 
C#-Layer :)   (2005-09-06 16:45) [10]

Если возможно, выложите пожалоуста что получилось или отправте на мыло : slstudioi_a@mail.ru


 
Digitman ©   (2005-09-06 17:04) [11]


> Signate ©   (06.09.05 14:35) [9]


1.


> Thread      : Pointer


указатель в одном АП не имеет смысла в другом

2.

TClient   = packed record


 
Joker666   (2005-09-06 17:31) [12]


> указатель в одном АП не имеет смысла в другом

что это значит?


 
Signate ©   (2005-09-06 17:33) [13]


> C#-Layer :)   (06.09.05 16:45) [10]


пока еще нечего показывать... почти все еще в теории


 
Digitman ©   (2005-09-06 17:51) [14]


> Joker666   (06.09.05 17:31) [12]


то и значит, что указатель имеют смысл в адресном пространстве только того процесса, в котором этот указатель получен



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.014 c
8-1121685750
race1
2005-07-18 15:22
2005.12.18
Вывод картинки с полупрозрачностью


14-1133209074
MRAk
2005-11-28 23:17
2005.12.18
Жордан гаус


2-1133380789
zxc
2005-11-30 22:59
2005.12.18
как сделать чтобы delphi понимал 4.3 и 4,3 как число


1-1132148032
STRINGGRID
2005-11-16 16:33
2005.12.18
setka StringGrida


4-1129315283
Jetus
2005-10-14 22:41
2005.12.18
Скриншот в файл на чистом API?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский