Форум: "Сети";
Текущий архив: 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.013 c