packages feed

kurita-0: app/Main.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module Main where

import           Control.Concurrent
import           Control.Time
import           Crypto.MAC.SipHash
import           Data.Bits.Extras (w32)
import           Data.Bytes.Put (runPutS)
import           Data.Bytes.Serial
import           Data.Time
import           Data.Text (Text)
import           Kurita.Emoji
import           Kurita.Protocol
import           Kurita.Server
import qualified Network.Wai.Handler.Warp as Warp


gameTime :: a -> NominalDiffTime
gameTime = const 15

type HLLSZ = 7

main :: IO ()
main = do
  let Right emoji = mapM uncodes ["U+1F600", "U+1F601", "U+1F606", "U+1F605"
                                 ,"U+1F923", "U+1F602", "U+1F642", "U+1F643"]
  initState <- loadState (\st _ ->  KGame st []) (\n _ _ -> KGame (15 `addUTCTime` n) []) emoji::IO (KuritaState HLLSZ Text)
  c <- localCore 1 initState
  _ <- forkIO $ Warp.run 8080 $ kuritaRelay
      (\_ -> (w32 . (\(SipHash h) -> h) . hash (SipKey 4 7) . runPutS . serialize) <$> getCurrentTime)
      c
  delay (120::Int)