in Sources/DistributedActors/Cluster/ClusterShell.swift [461:495]
func receiveShellCommand(_ context: _ActorContext<Message>, command: CommandMessage) -> _Behavior<Message> {
state.tracelog(.inbound, message: command)
switch command {
case .handshakeWith(let node):
return self.beginHandshake(context, state, with: node)
case .handshakeWithSpecific(let uniqueNode):
return self.beginHandshake(context, state, with: uniqueNode.node)
case .retryHandshake(let initiated):
return self.retryHandshake(context, state, initiated: initiated)
case .failureDetectorReachabilityChanged(let node, let reachability):
guard let member = state.membership.uniqueMember(node) else {
return .same // reachability change of unknown node
}
switch reachability {
case .reachable:
return self.onReachabilityChange(context, state: state, change: Cluster.ReachabilityChange(member: member.asReachable))
case .unreachable:
return self.onReachabilityChange(context, state: state, change: Cluster.ReachabilityChange(member: member.asUnreachable))
}
case .shutdown(let receptacle):
return self.onShutdownCommand(context, state: state, signalOnceUnbound: receptacle)
case .downCommand(let node):
if let member = state.membership.member(node) {
return self.ready(state: self.onDownCommand(context, state: state, member: member))
} else {
return self.ready(state: state)
}
case .downCommandMember(let member):
return self.ready(state: self.onDownCommand(context, state: state, member: member))
}
}