30 lines
751 B
Haskell
30 lines
751 B
Haskell
module Link.Types where
|
|
|
|
import Data.Time (UTCTime)
|
|
import System.IO (Handle)
|
|
import Control.Concurrent (MVar, Chan)
|
|
import qualified Data.Map as Map
|
|
|
|
type UserName = String
|
|
|
|
data User = User { userName :: !UserName }
|
|
deriving (Show, Eq, Ord)
|
|
|
|
data Client = Client {
|
|
clientUser :: !User
|
|
, clientHandle :: !Handle
|
|
, clientChan :: !(Chan Message)
|
|
, clientPongTime :: MVar UTCTime
|
|
}
|
|
|
|
data Server = Server {
|
|
serverUsers :: MVar (Map.Map User Client)
|
|
}
|
|
|
|
data Message = NameInUse UserName
|
|
| Connected UserName
|
|
| Ping
|
|
| Pong
|
|
| PrivMsg User String
|
|
deriving (Show, Eq)
|