Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Point Blank (Piercing Blow) (https://forum.zone-game.info/forumdisplay.php?f=204)
-   -   Ошибка сервера IOException (https://forum.zone-game.info/showthread.php?t=40731)

Boris2105 14.05.2016 22:34

Ошибка сервера IOException
 
Ошибка появилась после добавления пакета PROTOCOL_BASE_GET_USER_INFO_ACK
https://pp.vk.me/c633120/v633120434/...nllzNZrwl0.jpg

PROGRAMMATOR 14.05.2016 22:40

Re: Ошибка сервера
 
Клиент у тебя отвалился, а ты продолжаешь его читать. Нужно воспользоваться try {} catch блоком:

try
{
	// code here
}
catch (IOException)
{
	Disconnected();
}
catch (Exception ex)
{
	Disconnected();
 
	log.Error(ex);
}
 
Code: C#

Boris2105 15.05.2016 00:20

Re: Ошибка сервера
 
Цитата:

Сообщение от PROGRAMMATOR (Сообщение 412217)
Клиент у тебя отвалился, а ты продолжаешь его читать. Нужно воспользоваться try {} catch блоком:

try
{
	// code here
}
catch (IOException)
{
	Disconnected();
}
catch (Exception ex)
{
	Disconnected();
 
	log.Error(ex);
}
 
Code: C#

https://pp.vk.me/c633120/v633120434/...FlqGsMCKYI.jpg

Awiion 15.05.2016 00:24

Re: Ошибка сервера
 
Цитата:

Сообщение от Boris2105 (Сообщение 412221)

Стери этот ужас, в дисконектит
И будет все нормально

Boris2105 15.05.2016 00:29

Re: Ошибка сервера
 
Цитата:

Сообщение от Awiion (Сообщение 412222)
Стери этот ужас, в дисконектит
И будет все нормально

то есть реализовывать не надо?
теперь клиент просто закрывается

Awiion 15.05.2016 00:34

Re: Ошибка сервера
 
Цитата:

Сообщение от Boris2105 (Сообщение 412223)
то есть реализовывать не надо?
теперь клиент просто закрывается

Клиент игры? Или сервера?

Boris2105 15.05.2016 00:36

Re: Ошибка сервера
 
Цитата:

Сообщение от Awiion (Сообщение 412224)
Клиент игры? Или сервера?

клиент игры

Awiion 15.05.2016 00:40

Re: Ошибка сервера
 
Цитата:

Сообщение от Boris2105 (Сообщение 412225)
клиент игры

Тебе единственное что надо была сделать поставить тру\катч в BeginRead,
От туда взять условие когда разрывается соединения, вызывать дисконектит с клиентМенеджера

Boris2105 15.05.2016 00:41

Re: Ошибка сервера
 
Цитата:

Сообщение от Awiion (Сообщение 412226)
Тебе единственное что надо была сделать поставить тру\катч в BeginRead

Код:

               
public void BeginRead(IAsyncResult asyncResult)
                {
                    try
                    {
                        int received = Stream.EndRead(asyncResult);
                        Log.Info("Received = {0}", received);
                        while (received >= 6)
                        {
                            int length = BitConverter.ToUInt16(buffer, 0) & 0x7FFF;

                            byte[] temp = new byte[length + 2];
                            Array.Copy(buffer, 2, temp, 0, temp.Length);
                            int bits = Id % 7 + 1;
                            BitShift.Unshift(temp, bits);
                            byte[] opcode = new byte[] { temp[0], temp[1] };
                            RecvOpcode packet = (RecvOpcode)BitConverter.ToUInt16(opcode, 0);
                            Type t = Type.GetType("PiercingBlow.Login.Network.Recv." + packet.ToString());
                            Log.Info("PacketId = {0} Lenght = {1}", BitConverter.ToUInt16(opcode, 0), temp.Length);
                            if (t != null)
                            {
                                ClientPacket clientpacket = (ClientPacket)Activator.CreateInstance(t);
                                clientpacket.Client = this;
                                clientpacket.Process(buffer);
                            }
                            else
                            {
                                Log.Trace(temp.ToHex());
                            }
                            received -= length + 4;
                            Array.Copy(buffer, length + 4, buffer, 0, received);
                        }
                        Stream.BeginRead(buffer, 0, buffer.Length, BeginRead, null);
                    }
                    catch (IOException)
                    {
                        Disconnected();
                    }
                    catch (Exception ex)
                    {
                        Disconnected();
                        Log.Error("error",ex);
                    }
                    }


PROGRAMMATOR 15.05.2016 00:41

Re: Ошибка сервера
 
Цитата:

Сообщение от Boris2105 (Сообщение 412223)
то есть реализовывать не надо?

Нужно, ведь объект игрока нужно удалить (если это требуется - выйти с боя\комнаты\канала). Тебе нужно разобраться почему клиент падает, попробуй изучить BC.log, возможно там он сказал причину.


Текущее время: 14:07. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot