@@ -423,7 +423,8 @@ handleIncomingMessages node = go [] Map.empty
423 NT.ConnectionClosed cid ->
423 NT.ConnectionClosed cid ->
424 go (List.delete cid halfOpenConns) (Map.delete cid openConns)
424 go (List.delete cid halfOpenConns) (Map.delete cid openConns)
425 NT.ErrorEvent _ ->
425 NT.ErrorEvent _ ->
426− fail "handleIncomingMessages: TODO 3"
426+ -- fail "handleIncomingMessages: TODO 3"
427+ go halfOpenConns openConns
427 NT.EndPointClosed ->
428 NT.EndPointClosed ->
428 return ()
429 return ()
429 NT.ReceivedMulticast _ _ ->
430 NT.ReceivedMulticast _ _ ->
@@ -437,26 +438,26 @@ handleIncomingMessages node = go [] Map.empty
437--------------------------------------------------------------------------------
438--------------------------------------------------------------------------------
439getConnectionTo :: ProcessId -> Process (Maybe NT.Connection)
440getConnectionTo :: ProcessId -> Process (Maybe NT.Connection)
440−getConnectionTo pid = do
441+getConnectionTo them = do
441 ourState <- processState <$> ask
442 ourState <- processState <$> ask
442− mConn <- liftIO $ withMVar ourState $ return . (^. connectionTo pid)
443+ mConn <- liftIO $ withMVar ourState $ return . (^. connectionTo them)
443 case mConn of
444 case mConn of
444 Just conn -> return . Just $ conn
445 Just conn -> return . Just $ conn
445− Nothing -> createConnectionTo pid
446+ Nothing -> createConnectionTo them
447createConnectionTo :: ProcessId -> Process (Maybe NT.Connection)
448createConnectionTo :: ProcessId -> Process (Maybe NT.Connection)
448−createConnectionTo pid = do
449+createConnectionTo them = do
449 proc <- ask
450 proc <- ask
450 mConn <- liftIO $ NT.connect (localEndPoint . processNode $ proc)
451 mConn <- liftIO $ NT.connect (localEndPoint . processNode $ proc)
451− (processAddress pid)
452+ (processAddress them)
452 NT.ReliableOrdered
453 NT.ReliableOrdered
453 NT.defaultConnectHints
454 NT.defaultConnectHints
454 case mConn of
455 case mConn of
455 Right conn -> do
456 Right conn -> do
456 mConn' <- liftIO $ modifyMVar (processState proc) $ \st ->
457 mConn' <- liftIO $ modifyMVar (processState proc) $ \st ->
457− case st ^. connectionTo pid of
458+ case st ^. connectionTo them of
458 Just conn' -> return (st, Just conn')
459 Just conn' -> return (st, Just conn')
459− Nothing -> return (connectionTo pid ^= Just conn $ st, Nothing)
460+ Nothing -> return (connectionTo them ^= Just conn $ st, Nothing)
460 case mConn' of
461 case mConn' of
461 Just conn' -> do
462 Just conn' -> do
462 -- Somebody else already created a connection while we weren't looking
463 -- Somebody else already created a connection while we weren't looking
@@ -467,27 +468,30 @@ createConnectionTo pid = do
467 liftIO $ NT.close conn
468 liftIO $ NT.close conn
468 return . Just $ conn'
469 return . Just $ conn'
469 Nothing -> do
470 Nothing -> do
470− sendBinary pid conn $ lpidToPayload (processLocalId pid)
471+ sendBinary them conn $ lpidToPayload (processLocalId them)
471 return . Just $ conn
472 return . Just $ conn
472 Left _err -> do
473 Left _err -> do
473 -- TODO: should probably pass this error to remoteProcessFailed
474 -- TODO: should probably pass this error to remoteProcessFailed
474− remoteProcessFailed pid
475+ remoteProcessFailed them
475 return Nothing
476 return Nothing
477sendBinary :: ProcessId -> NT.Connection -> [BSS.ByteString] -> Process ()
478sendBinary :: ProcessId -> NT.Connection -> [BSS.ByteString] -> Process ()
478−sendBinary pid conn payload = do
479+sendBinary them conn payload = do
479 result <- liftIO $ NT.send conn payload
480 result <- liftIO $ NT.send conn payload
480 case result of
481 case result of
481 Right () -> return ()
482 Right () -> return ()
482− Left err -> do
483+ Left _ ->
485+ -- TODO: put into unreachable state rather than Nothing
483− ourState <- processState <$> ask
486+ -- ourState <- processState <$> ask
484 liftIO $ modifyMVar_ ourState $
487 liftIO $ modifyMVar_ ourState $
485− return . (connectionTo pid ^= Nothing)
488+ return . (connectionTo them ^= Nothing)
486− liftIO $ throwIO err
489+ -}
490+ remoteProcessFailed them
488sendMessage :: ProcessId -> NT.Connection -> Message -> Process ()
492sendMessage :: ProcessId -> NT.Connection -> Message -> Process ()
489−sendMessage pid conn (Message fp enc) =
493+sendMessage them conn (Message fp enc) =
490− sendBinary pid conn $ encodeFingerprint fp : BSL.toChunks enc
494+ sendBinary them conn $ encodeFingerprint fp : BSL.toChunks enc
492payloadToMessage :: [BSS.ByteString] -> Message
496payloadToMessage :: [BSS.ByteString] -> Message
493payloadToMessage payload = Message fp msg
497payloadToMessage payload = Message fp msg