func (cr *connectionRun) handleMsgFromServer(msg *msgs.Message) error { if cr.currentState != cr { // probably just draining the queue from the reader after a restart return nil } cr.missingBeats = 0 switch which := msg.Which(); which { case msgs.MESSAGE_HEARTBEAT: // do nothing case msgs.MESSAGE_CONNECTIONERROR: return fmt.Errorf("Error received from %v: \"%s\"", cr.remoteRMId, msg.ConnectionError()) case msgs.MESSAGE_TOPOLOGYCHANGEREQUEST: configCap := msg.TopologyChangeRequest() config := configuration.ConfigurationFromCap(&configCap) cr.connectionManager.RequestConfigurationChange(config) default: cr.connectionManager.DispatchMessage(cr.remoteRMId, which, msg) } return nil }