Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
PROTOCOL_LOGIN_ACK
#1
Programmator не мог бы ты еще немного помочь.
Я начал писать подключение к БД и возник вопрос.
После отправки пакета PROTOCOL_LOGIN_ACK, мне надо что то вызывать чтобы подключиться к БД и пошла загрузка инф из БД в PROTOCOL_BASE_GET_USER_INFO_ACK?

И не мог бы подсказать что нужно для написание BattleServer с UDP 3?


Ошибка так и осталась, хоть я и изменил
ClientConnection
[Изображение: pW9PeEHaIqs.jpg]
Ответ
#2
Boris2105, Для udp3 сервера надо,
Пакет подключения игрока, вот Connect
Пакет о комнате,
Пакет о состояние боя,
И структуру динамического боя.
Это все есть тут
______________________________
Boris2105 Написал:Programmator не мог бы ты еще немного помочь.
Я начал писать подключение к БД и возник вопрос.
После отправки пакета PROTOCOL_LOGIN_ACK, мне надо что то вызывать чтобы подключиться к БД и пошла загрузка инф из БД в PROTOCOL_BASE_GET_USER_INFO_ACK?

А что там такого?

Пишешь коннектор, создаешь таблицу и указываешь аккаунт ид.
потом потом ее кидаешь в цикл, получится типо такого

private Player player;
player = PlayerTable.Players[account.AccountID];
Ответ
#3
Boris2105, предположу, что MySQL? Через NuGet ставишь MySql.Data, и по примеру Awiion пишешь примерно следующее:

[SRC="csharp"]using (var reader = MySqlHelper.ExecuteReader(ConnectionString, "SELECT * FROM `accounts`"))
{
while (reader.Read())
{
var account = new Account()
{
Id = reader.GetUInt64("Id"),
Name = reader.GetString("Name"),
Password = reader.GetString("Password"),
Email = reader.GetString("Email"),
// ...
};

accounts.Add(account);
}
}
[/SRC]


Или доставить ещё Dapper и тогда можно так:

[SRC="csharp"]using (var connection = Cached.GetConnection) // connection = MySqlConnection
{
var accounts = SqlMapper.Query<AccountModel>(connection, "SELECT * FROM `accounts`");

return accounts;
}
[/SRC]


И выбираешь при авторизации по логину (токену если нужно):

[SRC="csharp"]var account = accounts.FirstOrDefault(x => x.Login == login);
[/SRC]


ConnectionString имеет следующий вид:

Код:
$"server={server};port={port};database={database};Character Set={encoding};User Id={user};password={password}"
Ответ
#4
PROGRAMMATOR Написал:Boris2105, предположу, что MySQL? Через NuGet ставишь MySql.Data, и по примеру Awiion пишешь примерно следующее:

[SRC="csharp"]using (var reader = MySqlHelper.ExecuteReader(ConnectionString, "SELECT * FROM `accounts`"))
{
while (reader.Read())
{
var account = new Account()
{
Id = reader.GetUInt64("Id"),
Name = reader.GetString("Name"),
Password = reader.GetString("Password"),
Email = reader.GetString("Email"),
// ...
};

accounts.Add(account);
}
}
[/SRC]


Или доставить ещё Dapper и тогда можно так:

[SRC="csharp"]using (var connection = Cached.GetConnection) // connection = MySqlConnection
{
var accounts = SqlMapper.Query<AccountModel>(connection, "SELECT * FROM `accounts`");

return accounts;
}
[/SRC]


И выбираешь при авторизации по логину (токену если нужно):

[SRC="csharp"]var account = accounts.FirstOrDefault(x => x.Login == login);
[/SRC]


ConnectionString имеет следующий вид:

Код:
$"server={server};port={port};database={database};Character Set={encoding};User Id={user};password={password}"


Спасибо , а вот на счет этого?
Цитата:Ошибка так и осталась, хоть я и изменил
ClientConnection
[Изображение: pW9PeEHaIqs.jpg]
Ответ
#5
Тебе виднее, я же не вижу, как себя ведёт клиент.
Может после подключения он валится от какой-то ошибки.
Ответ
#6
При попытке войти , клиент сразу отключает.
[Изображение: BX3yBMagVbI.jpg]

ClientPacket

PROTOCOL_LOGIN_REQ
PROTOCOL_LOGIN_ACK
Ответ
#7
Открой для себя BinaryReader и BinaryWriter и не нужно будет париться об офсетах.

Код:
int _length = text.IndexOf(char.MinValue);
if (_length != -1)
{
text = text.Substring(0, _length);
}

Это не длина, а индекс (IndexOf как бы намекает).

[SRC="csharp"]int index = text.IndexOf('\0');

if (index != -1)
{
text = text.Remove(index);
}
[/SRC]


P.S. Незачем новую тему создавать, ты же пару дней назад с таким же названием создал.
Ответ
#8
PROGRAMMATOR Написал:Открой для себя BinaryReader и BinaryWriter и не нужно будет париться об офсетах.

Код:
int _length = text.IndexOf(char.MinValue);
if (_length != -1)
{
text = text.Substring(0, _length);
}

Это не длина, а индекс (IndexOf как бы намекает).

[SRC="csharp"]int index = text.IndexOf('\0');

if (index != -1)
{
text = text.Remove(index);
}
[/SRC]


P.S. Незачем новую тему создавать, ты же пару дней назад с таким же названием создал.


ты имеешь ввиду что-то типа такого?
Код:
private BinaryReader reader;
private byte[] _buffer;
private int _offset;
public int Remaining { get { return (int)(_buffer - _offset); } }
public int ReadInt()
        {
            if (Remaining < 4)
                throw new IndexOutOfRangeException();
            return reader.ReadInt32();
        }
Ответ
#9
Типа такого:

[SRC="csharp"]public class PacketReader
{
MemoryStream stream;
BinaryReader reader;

/// <summary>
///
/// </summary>
/// <param name="buffer"></param>
public void Init(byte[] buffer)
{
stream = new MemoryStream(buffer);
reader = new BinaryReader(stream);
}

/// <summary>
///
/// </summary>
/// <returns></returns>
protected int ReadInt() => reader.ReadInt();

/// ...
}
[/SRC]
Ответ
#10
то есть вместо ReadD будет использоваться protected int ReadInt() => reader.ReadInt(); ?
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Структура PROTOCOL_LOGIN_ACK Sojang 15 4,025 01-20-2016, 01:02 AM
Последний пост: PROGRAMMATOR

Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)