Example #1
0
        public BNetHeader(CodedInputStream stream)
        {
            var serviceId = stream.ReadRawByte();
            var methodId  = stream.ReadRawVarint32();
            var requestId = stream.ReadRawByte() | (stream.ReadRawByte() << 8);

            var objectId = 0UL;

            if (serviceId != 0xfe)
            {
                objectId = stream.ReadRawVarint64();
            }
            var payloadLength = stream.ReadRawVarint32();

            this.SetData(serviceId, methodId, requestId, payloadLength, objectId);
        }
Example #2
0
        private void ParseHeader(byte[] array)
        {
            CodedInputStream stream = CodedInputStream.CreateInstance(array);
            var size       = (stream.ReadRawByte() << 8) | stream.ReadRawByte(); // header size.
            var headerData = stream.ReadRawBytes(size);                          // header data.
            var Header     = bnet.protocol.Header.ParseFrom(headerData);         // parse header.

            outputBox.ResetText();
            outputBox.Text = string.Format(
                "ServiceID = {0}\r\n"
                + "MethodID  = {1}\r\n"
                + "Token = {2}\r\n"
                + "ObjectID  = {3}\r\n"
                + "Size  = {4}\r\n"
                + "Status = {5}\r\n"
                + "Errors = {6}\r\n",
                Header.ServiceId,
                Header.HasMethodId ? Header.MethodId.ToString() : "None",
                Header.HasToken ? Header.Token.ToString() : "None",
                Header.HasObjectId ? Header.ObjectId.ToString() : "None",
                Header.HasSize ? Header.Size.ToString() : "None",
                Header.HasStatus ? Header.Status.ToString() : "None",
                Header.ErrorCount);
        }
Example #3
0
        public ClientPacket(CodedInputStream stream)
        {
            m_stream = stream;

            // Read header
            m_service    = m_stream.ReadRawByte();
            m_method     = m_stream.ReadInt32();
            m_requestId  = m_stream.ReadInt16();
            m_listenerId = 0;

            Console.WriteLine("IN: service {0}, method {1:X}, requestId {2}, listenerId {3}", m_service, m_method, m_requestId, m_listenerId);

            if (m_service != 0xFE)
            {
                m_listenerId = m_stream.ReadRawVarint64();
            }
        }
Example #4
0
        void HandlePacket(CodedInputStream reader)
        {
            var service_id = reader.ReadRawByte();
            var method_id  = reader.ReadInt32() - 1;
            var request_id = reader.ReadFixedUInt16();

            Debug.WriteLine("Received packet [service_id: 0x{0:X2}, method_id: {1}, request_id: {2}]", service_id, method_id, request_id);
            // Handle RPC responses
            if (service_id == RESPONSE_SERVICE_ID)
            {
                Debug.WriteLine("  received response");
                HandleResponse(request_id, reader);
            }
            else
            {
                var listener_id = reader.ReadInt64();
                Debug.WriteLine("  listener_id: {0}", listener_id);

                IService service;
                if (!exportedServices.TryGetValue(service_id, out service))
                {
                    throw new ArgumentException("No service bound on index " + service_id);
                }

                // Load correct descriptor for the requested method
                var method_descriptor = service.DescriptorForType.Methods[method_id];
                // Create a prototype of the request message
                var message_prototype = service.GetRequestPrototype(method_descriptor);
                // And create a builder for that message
                var builder = message_prototype.WeakCreateBuilderForType();
                // Read the message into the correct builder
                var message = ReadMessage(reader, builder);

                Debug.WriteLine("  passing RPC to {0}::{1}", method_descriptor.Service.Name, method_descriptor.Name);
                Debug.WriteLine(message.ToString());

                // Response callback sends the repsponse
                service.CallMethod(method_descriptor, null, message, m => SendResponse(request_id, m));
            }
        }