All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.fmq.socket.api.ConnectApi.scala Maven / Gradle / Ivy

The newest version!
package io.fmq.socket.api

import cats.effect.kernel.{Resource, Sync}
import cats.syntax.functor._
import io.fmq.address.Uri
import org.zeromq.ZMQ

trait ConnectApi[F[_], Socket[_[_]]] {

  protected implicit val F: Sync[F]
  protected implicit val SF: SocketFactory[Socket]

  protected[fmq] def socket: ZMQ.Socket

  final def connect(uri: Uri.Complete): Resource[F, Socket[F]] = {
    val address = uri.materialize

    val acquire: F[ZMQ.Socket]          = F.blocking(socket.connect(address)).as(socket)
    def release(s: ZMQ.Socket): F[Unit] = F.blocking(s.disconnect(address)).void

    Resource.make(acquire)(release).as(SF.create[F](socket, uri))
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy