Example #1
0
        private void Listen()
        {
            byte[] header = new byte[3];
            try
            {
                while (m_connection.IsConnected)
                {
                    byte[] hdr = m_connection.Receive(header, 0, 3);
                    if (hdr == null)
                    {
                        return;              // disconnected.
                    }
                    byte[] result = null;
                    ushort length = BitConverter.ToUInt16(hdr, 0);
                    if (length > 3)
                    {
                        if (length > BattleNetClientResources.IncomingBufferPool.BufferLength)
                        {
                            throw new ProtocolViolationException("Battle.net realm server message was too long to process.");
                        }

                        byte[] data = BattleNetClientResources.IncomingBufferPool.GetBuffer();
                        result = m_connection.Receive(data, 0, unchecked ((ushort)(length - 3)));
                        if (result == null)
                        {
                            return;                 // disconnected.
                        }
                    }
                    else if (length == 3)
                    {
                        length = unchecked ((ushort)(length - 3));
                        result = new byte[0];
                    }
                    else
                    {
                        throw new ProtocolViolationException("Battle.net specified an invalid packet length.");
                    }
                    McpParseData parseData = new McpParseData(hdr[2], length, result);
                    m_packetQueue.Enqueue(parseData);
                    m_parseWait.Set();
                }
            }
            catch (ThreadAbortException)
            {
                // exit the thread gracefully.
            }
        }
Example #2
0
        private void Listen()
        {
            byte[] header = new byte[3];
            try
            {
                while (m_connection.IsConnected)
                {
                    byte[] hdr = m_connection.Receive(header, 0, 3);
                    if (hdr == null) return; // disconnected.
                    byte[] result = null;
                    ushort length = BitConverter.ToUInt16(hdr, 0);
                    if (length > 3)
                    {
                        if (length > BattleNetClientResources.IncomingBufferPool.BufferLength)
                            throw new ProtocolViolationException("Battle.net realm server message was too long to process.");

                        byte[] data = BattleNetClientResources.IncomingBufferPool.GetBuffer();
                        result = m_connection.Receive(data, 0, unchecked((ushort)(length - 3)));
                        if (result == null) return; // disconnected.
                    }
                    else if (length == 3)
                    {
                        length = unchecked((ushort)(length - 3));
                        result = new byte[0];
                    }
                    else
                    {
                        throw new ProtocolViolationException("Battle.net specified an invalid packet length.");
                    }
                    McpParseData parseData = new McpParseData(hdr[2], length, result);
                    m_packetQueue.Enqueue(parseData);
                    m_parseWait.Set();
                }
            }
            catch (ThreadAbortException)
            {
                // exit the thread gracefully.
            }
        }
Example #3
0
        private void Parse()
        {
            try
            {
                while (m_connection.IsConnected)
                {
                    m_parseWait.Reset();

                    while (m_packetQueue.Count == 0)
                    {
                        m_parseWait.WaitOne();
                    }

                    McpParseData data = m_packetQueue.Dequeue();

                    switch (data.PacketID)
                    {
                    case McpPacketId.Startup:
                        break;

                    case McpPacketId.CharacterCreate:
                        break;

                    case McpPacketId.CreateGame:
                        break;

                    case McpPacketId.JoinGame:
                        break;

                    case McpPacketId.GameList:
                        break;

                    case McpPacketId.GameInfo:
                        break;

                    case McpPacketId.CharacterLogon:
                        break;

                    case McpPacketId.CharacterDelete:
                        break;

                    case McpPacketId.RequestLadderData:
                        break;

                    case McpPacketId.MessageOfTheDay:
                        break;

                    case McpPacketId.CreateQueue:
                        break;

                    case McpPacketId.CharacterList:
                        break;

                    case McpPacketId.CharacterUpgrade:
                        break;

                    case McpPacketId.CharacterList2:
                        break;

                    default:
                        Trace.WriteLine(data.PacketID, "Unhandled/unknown realm server packet");
                        break;
                    }
                }
            }
            catch (ThreadAbortException)
            {
                // exit the thread gracefully.
            }
        }