metro: A simple tcp and udp socket server framework

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Please see the README on GitHub at https://github.com/Lupino/metro#readme


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.1.0.2, 0.1.0.3, 0.1.0.4, 0.1.0.5
Change log ChangeLog.md
Dependencies base (>=4.7 && <5), binary, bytestring, hashable, hslogger, mtl, transformers, unix-time, unliftio, unordered-containers [details]
License BSD-3-Clause
Copyright MIT
Author Lupino
Maintainer lmjubuntu@gmail.com
Category Network, Framework
Home page https://github.com/Lupino/metro#readme
Bug tracker https://github.com/Lupino/metro/issues
Source repo head: git clone https://github.com/Lupino/metro
Uploaded by Lupino at 2020-09-19T06:02:48Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for metro-0.1.0.2

[back to package description]

metro

a simple tcp and udp socket server framework

Quick start with example

import Metro.Class
import Metro.Node
import Metro.TCP
import Metro.Servable
import Metro.Session (SessionT, makeResponse_)

data CustomPacket = CustomPacket { ... }
type CustomPacketId = ...

instance RecvPacket CustomPacket where
  recvPacket recv = ...
instance SendPacket CustomPacket where
  sendPacket pkt send = ...

instance GetPacketId CustomPacketId where
  getPacketId = ...
instance SetPacketId CustomPacketId where
  setPacketId k pkt = ...

type NodeId = ...
data CustomEnv = CustomEnv { ... }
type DeviceT = NodeT CustomEnv NodeId CustomPacketId CustomPacket
type DeviceEnv = NodeEnv1 CustomEnv NodeId CustomPacketId CustomPacket

sessionHandler = makeResponse_ $ \pkt -> ...

sessionGen :: IO CustomPacketId
sessionGen = ..

prepare :: Socket -> ConnEnv tp -> IO (Maybe (NodeId, CustomEnv))
prepare sock connEnv = Just ...

keepalive = 300

bind_port = "tcp://:8080"

startExampleServer = do
  sEnv <- initServerEnv "Example" (tcpConfig "tcp://:8080") sessionGen rawSocket prepare
  void $ forkIO $ startServer sEnv sessionHandler

more see metro-example/src/Metro/Example.hs

Projects use metro