72 lines
2.2 KiB
Haskell
72 lines
2.2 KiB
Haskell
{-# LANGUAGE RecordWildCards #-}
|
|
module Pipes.IRC.Server.Types
|
|
( HostPreference(..)
|
|
, IrcHandler
|
|
, IrcMessage
|
|
, IrcConnection(..)
|
|
, IrcConfig(..)
|
|
, IrcServer(..)
|
|
, IrcUser(..)
|
|
, IrcChannel(..)
|
|
) where
|
|
|
|
import Control.Concurrent.STM (TVar)
|
|
import Data.ByteString (ByteString)
|
|
import Pipes (Consumer)
|
|
import Pipes.Concurrent (Output)
|
|
import Pipes.IRC.Message.Types (IrcMessage)
|
|
import Pipes.Network.TCP (HostPreference (..), ServiceName,
|
|
SockAddr, Socket)
|
|
|
|
data IrcServer =
|
|
IrcServer { ircConfig :: !IrcConfig
|
|
, ircConnections :: !(TVar [IrcConnection IrcMessage])
|
|
, ircUsers :: !(TVar [IrcUser])
|
|
, ircChannels :: !(TVar [IrcChannel])
|
|
, ircHandler :: !(Consumer IrcMessage IO ())
|
|
}
|
|
|
|
data IrcConfig =
|
|
IrcConfig { ircPort :: !ServiceName
|
|
, ircHost :: !HostPreference
|
|
} deriving (Show)
|
|
|
|
data IrcConnection a =
|
|
IrcConnection { sock :: !Socket
|
|
, addr :: !SockAddr
|
|
, out :: !(Output a)
|
|
}
|
|
|
|
instance Eq (IrcConnection a) where
|
|
(IrcConnection s1 _ _) == (IrcConnection s2 _ _) = s1 == s2
|
|
|
|
instance Show (IrcConnection a) where
|
|
show IrcConnection {..} =
|
|
"IrcConnection " ++ show sock ++ " " ++ show addr
|
|
|
|
type IrcHandler = (Socket, SockAddr) -> IO ()
|
|
|
|
data IrcUser =
|
|
IrcUser { userNick :: !ByteString
|
|
, userClientId :: !ByteString
|
|
, userServerName :: !ByteString
|
|
, userName :: !ByteString
|
|
, userHostName :: !ByteString
|
|
, userModes :: ![IrcUserMode]
|
|
, userConn :: !(IrcConnection IrcMessage)
|
|
} deriving (Show, Eq)
|
|
|
|
data IrcUserMode = Away | Invisible | WallOps | Restricted
|
|
| Oper | LocalOper | ServerNotices
|
|
deriving (Show, Eq, Enum)
|
|
|
|
data IrcChannel =
|
|
IrcChannel { chanName :: !ByteString
|
|
, chanTopic :: !ByteString
|
|
, chanModes :: ![IrcChanMode]
|
|
, chanUsers :: ![IrcUser]
|
|
} deriving (Show, Eq)
|
|
|
|
data IrcChanMode = Anonymous | InviteOnly | Moderated | Quiet | Secret
|
|
deriving (Show, Eq, Enum)
|