public MooNetCallNode(PacketIn packet, CodedInputStream stream) { var service = Service.GetByID(packet.Header.ServiceId); var method = service.DescriptorForType.Methods.Single(m => MooNetRouter.GetMethodId(m) == packet.Header.MethodId); var proto = service.GetRequestPrototype(method); reply = service.GetResponsePrototype(method); var builder = proto.WeakCreateBuilderForType(); try { message = builder.WeakMergeFrom(CodedInputStream.CreateInstance(packet.GetPayload(stream))).WeakBuild(); Text = message.DescriptorForType.Name; } catch (Exception e) { message = builder.WeakBuildPartial(); Text = "Error parsing message {0}"; } }
private static void ProcessMessage(MooNetClient client, CodedInputStream stream, PacketIn packet) { var service = Service.GetByID(packet.Header.ServiceId); if (service == null) { Logger.Error("No service exists with id: 0x{0}", packet.Header.ServiceId.ToString("X2")); return; } var method = service.DescriptorForType.Methods.Single(m => GetMethodId(m) == packet.Header.MethodId); var proto = service.GetRequestPrototype(method); var builder = proto.WeakCreateBuilderForType(); var message = builder.WeakMergeFrom(CodedInputStream.CreateInstance(packet.GetPayload(stream))).WeakBuild(); //var message = packet.ReadMessage(proto.WeakToBuilder()); // this method doesn't seem to work with 7728. /raist. Logger.LogIncoming(message); try { lock (service) // lock the service so that its in-context client does not get changed.. { ((IServerService)service).Client = client; ((IServerService)service).LastCallHeader = packet.Header; service.CallMethod(method, null, message, (msg => SendRPCResponse(client.Connection, packet.Header.Token, msg))); } } catch (NotImplementedException) { Logger.Warn("Unimplemented service method: {0}.{1}", service.GetType().Name, method.Name); } catch (UninitializedMessageException e) { Logger.Debug("Failed to parse message: {0}", e.Message); } catch (Exception e) { Logger.DebugException(e, string.Empty); } }