Главная страница
    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.013 c
6-1126192068
integery
2005-09-08 19:07
2005.12.18
помогите разобратса из TcpServer TcpClient


3-1130859732
Ega23
2005-11-01 18:42
2005.12.18
Проблемы логгирования данных


10-1109635929
GanibalLector
2005-03-01 03:12
2005.12.18
утилита Tlibimp


14-1133123063
Gero
2005-11-27 23:24
2005.12.18
Минестерство Российской Федерации


14-1132490094
AlexShm
2005-11-20 15:34
2005.12.18
7-я или 8-я?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский