Bytes2String() публичный статический Метод

public static Bytes2String ( byte bytes ) : string
bytes byte
Результат string
Пример #1
0
        public EBattlEyeCommandResult SendCommandPacket(string command)
        {
            try
            {
                if (!_socket.Connected)
                {
                    return(EBattlEyeCommandResult.NotConnected);
                }

                var    crc32 = new CRC32();
                string packet;
                string header = "BE";
                string hash   = crc32.ComputeHash(Helpers.String2Bytes(Helpers.Hex2Ascii("FF01") + Helpers.Bytes2String(new byte[] { 0 }) + command)).Aggregate <byte, string>(null,
                                                                                                                                                                               (current, b)
                                                                                                                                                                               =>
                                                                                                                                                                               current +
                                                                                                                                                                               b.ToString(
                                                                                                                                                                                   "X2"));
                hash    = Helpers.Hex2Ascii(hash);
                hash    = new string(hash.ToCharArray().Reverse().ToArray());
                header += hash;
                packet  = header + Helpers.Hex2Ascii("FF01") + Helpers.Bytes2String(new byte[] { 0 }) + command;
                _socket.Send(Helpers.String2Bytes(packet));

                _commandSend = DateTime.Now;
            }
            catch
            {
                return(EBattlEyeCommandResult.Error);
            }

            return(EBattlEyeCommandResult.Success);
        }
Пример #2
0
        private byte[] ConstructPacket(BattlEyePacketType packetType, int sequenceNumber, string command)
        {
            string type;

            switch (packetType)
            {
            case BattlEyePacketType.Login:
                type = Helpers.Hex2Ascii("FF00");
                break;

            case BattlEyePacketType.Command:
                type = Helpers.Hex2Ascii("FF01");
                break;

            case BattlEyePacketType.Acknowledge:
                type = Helpers.Hex2Ascii("FF02");
                break;

            default:
                return(new byte[] { });
            }

            if (packetType != BattlEyePacketType.Acknowledge)
            {
                if (command != null)
                {
                    command = Encoding.GetEncoding(1252).GetString(Encoding.UTF8.GetBytes(command));
                }
            }

            string count = Helpers.Bytes2String(new byte[] { (byte)sequenceNumber });

            byte[] byteArray = new CRC32().ComputeHash(Helpers.String2Bytes(type + ((packetType != BattlEyePacketType.Command) ? "" : count) + command));

            string hash = new string(Helpers.Hex2Ascii(BitConverter.ToString(byteArray).Replace("-", "")).ToCharArray().Reverse().ToArray());

            string packet = "BE" + hash + type + ((packetType != BattlEyePacketType.Command) ? "" : count) + command;

            return(Helpers.String2Bytes(packet));
        }
Пример #3
0
        private void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                StateObject state  = (StateObject)ar.AsyncState;
                Socket      client = state.WorkSocket;

                // this method can be called from the middle of a .Disconnect() call
                // test with Debug > Exception > CLR exs on
                if (!client.Connected)
                {
                    return;
                }

                int bytesRead = client.EndReceive(ar);

                if (state.Buffer[7] == 0x02)
                {
                    SendAcknowledgePacket(Helpers.Bytes2String(new[] { state.Buffer[8] }));
                    OnBattlEyeMessage(Helpers.Bytes2String(state.Buffer, 9, bytesRead - 9), 256);
                }
                else if (state.Buffer[7] == 0x01)
                {
                    if (bytesRead > 9)
                    {
                        if (state.Buffer[7] == 0x01 && state.Buffer[9] == 0x00)
                        {
                            if (state.Buffer[11] == 0)
                            {
                                state.PacketsTodo = state.Buffer[10];
                            }

                            if (state.PacketsTodo > 0)
                            {
                                state.Message.Append(Helpers.Bytes2String(state.Buffer, 12, bytesRead - 12));
                                state.PacketsTodo--;
                            }

                            if (state.PacketsTodo == 0)
                            {
                                OnBattlEyeMessage(state.Message.ToString(), state.Buffer[8]);
                                state.Message     = new StringBuilder();
                                state.PacketsTodo = 0;
                            }
                        }
                        else
                        {
                            // Temporary fix to avoid infinite loops with multi-packet server messages
                            state.Message     = new StringBuilder();
                            state.PacketsTodo = 0;

                            OnBattlEyeMessage(Helpers.Bytes2String(state.Buffer, 9, bytesRead - 9), state.Buffer[8]);
                        }
                    }

                    if (packetQueue.ContainsKey(state.Buffer[8]) && state.PacketsTodo == 0)
                    {
                        packetQueue.Remove(state.Buffer[8]);
                    }
                }

                packetReceived = DateTime.Now;

                client.BeginReceive(state.Buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
            }
            catch
            {
                // do nothing
            }
        }
Пример #4
0
        private void ThreadReceive()
        {
            byte[]        buffer      = new byte[2048];
            StringBuilder message     = new StringBuilder();
            int           packetsTodo = 0;

            while (keepRunning)
            {
                try
                {
                    int bytesRead = socket.Receive(buffer, 0);
                    if (bytesRead > 0)
                    {
                        if (buffer[7] == 0x02)
                        {
                            SendAcknowledgePacket(Helpers.Bytes2String(new[] { buffer[8] }));
                            OnBattlEyeMessage(Helpers.Bytes2String(buffer, 9, bytesRead - 9), 256);
                        }
                        else if (buffer[7] == 0x01)
                        {
                            if (bytesRead > 9)
                            {
                                if (buffer[7] == 0x01 && buffer[9] == 0x00)
                                {
                                    if (buffer[11] == 0)
                                    {
                                        packetsTodo = buffer[10];
                                    }

                                    if (packetsTodo > 0)
                                    {
                                        message.Append(Helpers.Bytes2String(buffer, 12, bytesRead - 12));
                                        packetsTodo--;
                                    }

                                    if (packetsTodo == 0)
                                    {
                                        OnBattlEyeMessage(message.ToString(), buffer[8]);
                                        message     = new StringBuilder();
                                        packetsTodo = 0;
                                    }
                                }
                                else
                                {
                                    // Temporary fix to avoid infinite loops with multi-packet server messages
                                    message     = new StringBuilder();
                                    packetsTodo = 0;

                                    OnBattlEyeMessage(Helpers.Bytes2String(buffer, 9, bytesRead - 9), buffer[8]);
                                }
                            }

                            mtxQueue.WaitOne();
                            try
                            {
                                if (packetQueue.ContainsKey(buffer[8]))
                                {
                                    packetQueue.Remove(buffer[8]);
                                }
                            }
                            catch /*(Exception ex)*/
                            {
                            }
                            mtxQueue.ReleaseMutex();
                        }

                        packetReceived = DateTime.Now;
                    }
                }
                catch (Exception ex)
                {
                    if (socket.Connected)
                    {
                        socket.Shutdown(SocketShutdown.Both);
                        socket.Close();
                    }
                    System.Diagnostics.Debug.Print(ex.Message);
                    Thread.Sleep(5000);
                }
            }
        }
Пример #5
0
        private void DoWork()
        {
            var bytesReceived = new Byte[4096];
            int bytes         = 0;

            string buffer      = null;
            int    bufferCount = 0;
            int    packetCount = 0;

            _disconnectionType = EBattlEyeDisconnectionType.ConnectionLost;

            while (_socket.Connected && _keepRunning)
            {
                try
                {
                    bytes = _socket.Receive(bytesReceived, bytesReceived.Length, 0);

                    if (bytesReceived[7] == 0x02)
                    {
                        SendAcknowledgePacket(Helpers.Bytes2String(new[] { bytesReceived[8] }));
                        OnMessageReceived(Helpers.Bytes2String(bytesReceived, 9, bytes - 9));
                    }
                    else if (bytesReceived[7] == 0x01)
                    {
                        if (bytes > 9)
                        {
                            if (bytesReceived[7] == 0x01 && bytesReceived[9] == 0x00)
                            {
                                if (bytesReceived[11] == 0)
                                {
                                    packetCount = bytesReceived[10];
                                }

                                if (bufferCount < packetCount)
                                {
                                    buffer += Helpers.Bytes2String(bytesReceived, 12, bytes - 12);
                                    bufferCount++;
                                }

                                if (bufferCount == packetCount)
                                {
                                    OnMessageReceived(buffer);
                                    buffer      = null;
                                    bufferCount = 0;
                                    packetCount = 0;
                                }
                            }
                            else
                            {
                                // Temporary fix to avoid infinite loops with multi-packet server messages
                                buffer      = null;
                                bufferCount = 0;
                                packetCount = 0;

                                OnMessageReceived(Helpers.Bytes2String(bytesReceived, 9, bytes - 9));
                            }
                        }
                    }

                    _responseReceived = DateTime.Now;
                    bytesReceived     = new Byte[4096];
                }
                catch (Exception)
                {
                    if (_keepRunning)
                    {
                        Disconnect(EBattlEyeDisconnectionType.SocketException);
                    }
                }
            }

            if (!_socket.Connected)
            {
                OnDisconnect(_loginCredentials, _disconnectionType);
            }
        }