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