public ServiceNotImplementedException(IpcService service, ServiceCtx context, string message, Exception inner)
     : base(message, inner)
 {
     Service = service;
     Context = context;
     Request = context.Request;
 }
 public ServiceNotImplementedException(IpcService service, ServiceCtx context, string message, Exception inner, bool isTipcCommand)
     : base(message, inner)
 {
     Service        = service;
     Context        = context;
     Request        = context.Request;
     _isTipcCommand = isTipcCommand;
 }
Ejemplo n.º 3
0
        [CommandTipc(1)] // 12.0.0+
        // GetService(ServiceName name) -> handle<move, session>
        public ResultCode GetService(ServiceCtx context)
        {
            if (!_isInitialized)
            {
                return(ResultCode.NotInitialized);
            }

            string name = ReadName(context);

            if (name == string.Empty)
            {
                return(ResultCode.InvalidName);
            }

            KSession session = new KSession(context.Device.System.KernelContext);

            if (_registeredServices.TryGetValue(name, out KPort port))
            {
                KernelResult result = port.EnqueueIncomingSession(session.ServerSession);

                if (result != KernelResult.Success)
                {
                    throw new InvalidOperationException($"Session enqueue on port returned error \"{result}\".");
                }
            }
            else
            {
                if (_services.TryGetValue(name, out Type type))
                {
                    ServiceAttribute serviceAttribute = (ServiceAttribute)type.GetCustomAttributes(typeof(ServiceAttribute)).First(service => ((ServiceAttribute)service).Name == name);

                    IpcService service = serviceAttribute.Parameter != null
                        ? (IpcService)Activator.CreateInstance(type, context, serviceAttribute.Parameter)
                        : (IpcService)Activator.CreateInstance(type, context);

                    service.TrySetServer(_commonServer);
                    service.Server.AddSessionObj(session.ServerSession, service);
                }
                else
                {
                    if (ServiceConfiguration.IgnoreMissingServices)
                    {
                        Logger.Warning?.Print(LogClass.Service, $"Missing service {name} ignored");
                    }
                    else
                    {
                        throw new NotImplementedException(name);
                    }
                }
            }

            if (context.Process.HandleTable.GenerateHandle(session.ClientSession, out int handle) != KernelResult.Success)
            {
                throw new InvalidOperationException("Out of handles!");
            }

            session.ServerSession.DecrementReferenceCount();
            session.ClientSession.DecrementReferenceCount();

            context.Response.HandleDesc = IpcHandleDesc.MakeMove(handle);

            return(ResultCode.Success);
        }
 public ServiceNotImplementedException(IpcService service, ServiceCtx context)
     : this(service, context, "The service call is not implemented.")
 {
 }
Ejemplo n.º 5
0
 public KSession(IpcService Service)
 {
     this.Service = Service;
 }
Ejemplo n.º 6
0
 public KSession(IpcService Service, string ServiceName)
 {
     this.Service     = Service;
     this.ServiceName = ServiceName;
 }
 public ServiceNotImplementedException(IpcService service, ServiceCtx context, bool isTipcCommand)
     : this(service, context, "The service call is not implemented.", isTipcCommand)
 {
 }
Ejemplo n.º 8
0
 public void Start()
 {
     _srv = new IpcService(Config.PipeName, this, 3);
 }
Ejemplo n.º 9
0
 public KSession(IpcService service, string serviceName)
 {
     Service     = service;
     ServiceName = serviceName;
 }