Skip to content
Snippets Groups Projects
Commit a902c25c authored by Trile Ro's avatar Trile Ro
Browse files

[TBC] Unify heartbeat message inside P2P, it's where it belongs

parent fea84d37
No related branches found
No related tags found
No related merge requests found
package acab.devcon0.trile.domain.codecs
import acab.devcon0.trile.domain.dtos.FederationControllerHeartbeatMessage
import acab.devcon0.trile.domain.dtos.FederationMemberHeartbeatMessage
import acab.devcon0.trile.domain.dtos.IpfsClusterPeer
import acab.devcon0.trile.domain.dtos.IpfsClusterPeerIpfsInfo
import acab.devcon0.trile.domain.dtos.IpfsClusterPeers
import cats.effect.IO
import io.circe._
import io.circe.generic.semiauto.deriveDecoder
import io.circe.generic.semiauto.deriveEncoder
import io.circe.jawn.decode
import io.circe.syntax.EncoderOps
object HeartbeatCodecs {
object Encoders {
implicit val ipfsClusterPeerIpfsInfo: Encoder[IpfsClusterPeerIpfsInfo] = deriveEncoder
implicit val ipfsClusterPeers: Encoder[IpfsClusterPeers] = deriveEncoder
implicit val ipfsClusterPeer: Encoder[IpfsClusterPeer] = deriveEncoder
implicit val federationControllerHeartbeat: Encoder[FederationControllerHeartbeatMessage] = deriveEncoder
implicit val federationMemberHeartbeat: Encoder[FederationMemberHeartbeatMessage] = deriveEncoder
object FederationMemberHeartbeat {
def apply(dto: FederationMemberHeartbeatMessage): IO[String] = IO(
EncoderOps[FederationMemberHeartbeatMessage](dto).asJson.noSpaces
)
}
object FederationControllerHeartbeat {
def apply(dto: FederationControllerHeartbeatMessage): IO[String] = IO(
EncoderOps[FederationControllerHeartbeatMessage](dto).asJson.noSpaces
)
}
}
object Decoders {
implicit val ipfsClusterPeerIpfsInfo: Decoder[IpfsClusterPeerIpfsInfo] = deriveDecoder
implicit val ipfsClusterPeers: Decoder[IpfsClusterPeers] = deriveDecoder
implicit val ipfsClusterPeer: Decoder[IpfsClusterPeer] = deriveDecoder
implicit val federationControllerHeartbeat: Decoder[FederationControllerHeartbeatMessage] = deriveDecoder
implicit val federationMemberHeartbeat: Decoder[FederationMemberHeartbeatMessage] = deriveDecoder
object FederationControllerHeartbeat {
def apply(rawJson: String): IO[FederationControllerHeartbeatMessage] =
IO.fromEither(decode[FederationControllerHeartbeatMessage](rawJson))
}
object FederationMemberHeartbeat {
def apply(rawJson: String): IO[FederationMemberHeartbeatMessage] =
IO.fromEither(decode[FederationMemberHeartbeatMessage](rawJson))
}
}
}
package acab.devcon0.trile.domain.codecs
import acab.devcon0.trile.domain.dtos.FederationControllerHeartbeatMessage
import acab.devcon0.trile.domain.dtos.FederationMemberHeartbeatMessage
import acab.devcon0.trile.domain.dtos.IpfsClusterPeer
import acab.devcon0.trile.domain.dtos.IpfsClusterPeerIpfsInfo
import acab.devcon0.trile.domain.dtos.IpfsClusterPeers
......
package acab.devcon0.trile.domain.dtos
import java.time.Instant
import acab.devcon0.trile.domain.dtos.aliases.IpfsCid
final case class FederationControllerHeartbeatMessage(peers: List[IpfsClusterPeer])
final case class FederationMemberHeartbeatMessage(ipfsPeerRootCid: IpfsCid, timestamp: Instant)
......@@ -2,6 +2,7 @@ package acab.devcon0.trile.domain.dtos.pubsub
import java.time.Instant
import acab.devcon0.trile.domain.dtos.IpfsClusterPeer
import acab.devcon0.trile.domain.dtos.aliases._
object P2p {
......@@ -22,6 +23,9 @@ object P2p {
final case class FederationMemberCheckInAck(to: P2pPeerId)
final case class FederationMemberCheckInNack(to: P2pPeerId)
final case class FederationControllerHeartbeatMessage(peers: List[IpfsClusterPeer])
final case class FederationMemberHeartbeatMessage(ipfsPeerRootCid: IpfsCid, timestamp: Instant)
object Keys {
val request: P2pMessageKey = "REQUEST"
val ack: P2pMessageKey = "ACK"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment