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); }
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); }
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(); } }
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)); } }