protected override void ProcessResponse(Envelope envelope) { if (envelope?.Message != null && envelope.Message?.GetType() == typeof(LoginReply)) { LoginReply replyMessage = (LoginReply)envelope.Message; Logger.Info("Received Login response: " + replyMessage.Note); OnLoginUpdated?.Invoke(ProcessInfo.DeepCopy(replyMessage.ProcessInfo)); WaitingForReply = false; } else if (envelope != null) { Logger.Info("Received unexpected message: " + envelope.Message?.ToString()); } else { Logger.Info("Received completely null envelope"); } }
public ProcessInfo ValidateProcess(ProcessInfo newProcess) { if (newProcess == null) { return(null); } Logger.Trace("Received login request from a process"); bool success = true; switch (newProcess.Type) { case ProcessInfo.ProcessType.Client: newProcess.ProcessId = NewProcessId; KnownClients[newProcess.ProcessId] = newProcess; break; case ProcessInfo.ProcessType.ContractManager: newProcess.ProcessId = 1; ContractManagerInfo = newProcess; break; default: success = false; break; } if (success) { newProcess.Status = ProcessInfo.StatusCode.Registered; newProcess.HeartbeatTimer = Scheduler.GetIntervalTimerMillis(HeartbeatIntervalMs); newProcess.HeartbeatTimer.Elapsed += (sender, e) => OnHeartbeatExpired(sender, e, newProcess); newProcess.HeartbeatTimer.Enabled = true; Registration_OnChange?.Invoke(ProcessInfo.DeepCopy(newProcess)); } else { newProcess.Status = ProcessInfo.StatusCode.Terminated; Logger.Info($"Cannot register {newProcess.LabelAndId} "); } return(ProcessInfo.DeepCopy(newProcess)); }