namespace DummyClient
{
    internal class SessionManager
    {
        static SessionManager _session = new SessionManager();
        public static SessionManager Instance { get { return _session; } }
        List<ServerSession> _sessions = new List<ServerSession>();
        object _lock = new object();
        public void SendForEach()
        {
            lock (_lock)
            {
                foreach (ServerSession session in _sessions)
                {
                    C_Chat chatPacket = new C_Chat();
                    chatPacket.chat = $"Hello Server !";
                    ArraySegment<byte> segment = chatPacket.Write();
                    session.Send(segment);
                }
            }
        }
리스트에 있는 각 세션에 패킷의 내용을 보내는 기능을 한다.
        public ServerSession Generate()
        {
            lock (_lock)
            {
                ServerSession session = new ServerSession();
                _sessions.Add(session);
                return session;
            }
        }   
세션을 새로 생성하는 함수이다.
생성한 함수는 리스트에 저장해둔다.
connector.Connect(endPoint, () => { return SessionManager.Instance.Generate(); }, 10);
Main에서 다음과 같은 방식으로 세션을 생성하여 연결한다.
class PacketHandler
{
    public static void C_ChatHandler(PacketSession session, IPacket packet)
    {
        C_Chat chatPacket = packet as C_Chat;
        ClientSession clientSession = session as ClientSession;
        if (clientSession.Room == null)
            return;
        clientSession.Room.Broadcast(clientSession, chatPacket.chat);
    }    
}
클라이언트로부터 온 패킷을 Broadcast한다.
		public void Broadcast(ClientSession session, string chat)
        {            
            S_Chat packet = new S_Chat();
            packet.playerId = session.SessionId;
            packet.chat = $"{chat} I am {packet.playerId}";
            ArraySegment<byte> segment = packet.Write();
            lock (_lock)
            {
                foreach (ClientSession s in _sessions)
                    s.Send(segment);
            }
        }
클라에서 서버로 패킷의 playerId를 보낸다.
