Пример #1
0
        public override Task <RegisterServiceResponseMessage> RegisterService(RegisterServiceMessage request, ServerCallContext context)
        {
            var retRaw = serviceBackend.Broker.RegisterService(new MessagingShared.Hub.Protocol.RegisterServiceMessage
            {
                ResponderFor = request.ResponderFor,
                ServiceName  = request.ServiceName,
                Ttl          = request.Ttl
            });
            var ret = new RegisterServiceResponseMessage
            {
                Ok            = retRaw.Ok,
                Reason        = retRaw.Reason ?? "",
                SessionTicket = retRaw.SessionTicket ?? ""
            };

            return(Task.FromResult(ret));
        }
Пример #2
0
        public RegisterServiceResponseMessage RegisterService(RegisterServiceMessage registration)
        {
            lock (registrationLock)
            {
                try
                {
                    if (GrabService(registration.ServiceName, null, false, out var service, out var operations, out var waitingMessages))
                    {
                        return(new RegisterServiceResponseMessage
                        {
                            Reason = "Service is already registered!",
                            Ok = false
                        });
                    }

                    var newSvc = new ServiceStatus
                    {
                        LastPing           = DateTime.Now,
                        Ttl                = registration.Ttl,
                        ServiceName        = registration.ServiceName,
                        RegistrationTicket = $"{registration.ServiceName}_{DateTime.Now.Ticks}_{rnd.Next(10000000)}",
                        ServiceKind        = ServiceStatus.ServiceType.InterProcess
                    };
                    StringBuilder fmsg = new StringBuilder();
                    bool          ok   = services.TryAdd(registration.ServiceName, newSvc);
                    if (!ok)
                    {
                        fmsg.Append(@"Service-Entry could not be added.
");
                    }
                    ok = ok && openWaitHandles.TryAdd(registration.ServiceName, new ConcurrentDictionary <string, OperationWaitHandle>());
                    if (!ok)
                    {
                        fmsg.Append(@"OpenWait-Entry could not be added.
");
                    }
                    ok = ok && messages.TryAdd(registration.ServiceName, new ConcurrentQueue <OperationWaitHandle>());
                    if (!ok)
                    {
                        fmsg.Append(@"OpenMsg-Entry could not be added.
");
                    }
                    var retVal = new RegisterServiceResponseMessage
                    {
                        SessionTicket = newSvc.RegistrationTicket,
                        Ok            = ok,
                        Reason        = ok ? "" : fmsg.ToString()
                    };
                    if (!ok)
                    {
                        UnsafeServerDrop(registration.ServiceName);
                    }

                    return(retVal);
                }
                catch (Exception ex)
                {
                    return(new RegisterServiceResponseMessage
                    {
                        Ok = false,
                        Reason = ex.Message
                    });
                }
            }
        }