diff options
| author | tv <tv@krebsco.de> | 2017-04-11 20:46:44 +0200 | 
|---|---|---|
| committer | tv <tv@krebsco.de> | 2017-04-11 20:46:44 +0200 | 
| commit | e6d8b646d243a7110a8c58bcc0dd90a713472419 (patch) | |
| tree | bcbe96dc23a27f75c9347abda35ac1caef580806 | |
initial commit
| -rw-r--r-- | main.hs | 40 | ||||
| -rw-r--r-- | shell.nix | 34 | 
2 files changed, 74 insertions, 0 deletions
| @@ -0,0 +1,40 @@ +{-# LANGUAGE OverloadedStrings #-} + +import Control.Monad (forever) +import Network (withSocketsDo, PortID(..), connectTo) +import System.IO (hSetBuffering, hSetNewlineMode, hPutStrLn, hClose, hGetLine, BufferMode(LineBuffering), universalNewlineMode, Handle) +import Control.Concurrent.Async (race) +import Control.Exception.Base (finally) +import Data.Text (isPrefixOf, pack, replace, unpack) + +main :: IO () +main = withSocketsDo $ do +  h <- connectTo "ni.r" (PortNumber 6667) +  talk h `finally` hClose h + +handshake :: Handle -> IO () +handshake h = do +    hPutStrLn h "NICK test" +    hPutStrLn h "USER test * 0 :test" +    hPutStrLn h "JOIN #retiolum" + +talk :: Handle -> IO () +talk h = do +    hSetNewlineMode h universalNewlineMode +    hSetBuffering h LineBuffering +    handshake h +    _ <- race fromServer toServer +    return () +  where +    fromServer = forever $ do +      line <- hGetLine h +      --case line of +      if (isPrefixOf "PING" (pack line)) then +        hPutStrLn h (unpack (replace "PING" "PONG" (pack line))) +      else +        print line +    toServer = do +      line <- getLine +      case line of +        ":quit" -> do hPutStrLn h "/quit"; return "Quit" +        _ -> do hPutStrLn h ("PRIVMSG #retiolum :" ++ line); toServer diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..1e27f23 --- /dev/null +++ b/shell.nix @@ -0,0 +1,34 @@ + +let +  pname = "news"; +  version = "1"; + +  pkgs = nixpkgs // extrapkgs; +  nixpkgs = import <nixpkgs> {}; +  extrapkgs = { +  }; +  hsPkgs = pkgs.haskellPackages; +  hsEnv = hsPkgs.ghcWithPackages (_hsPkgs: with _hsPkgs; +    [ +      irc +      irc-client +      feed +      split +      warp +      wai-util +    ]); +in + +pkgs.myEnvFun { +  name = "${pname}-${version}"; + +  buildInputs = with pkgs; [ +    hsEnv +  ]; + +  extraCmds = with pkgs; '' +    $(grep export ${hsEnv.outPath}/bin/ghc) +  ''; +} + +# vim: set fdm=marker : | 
