static void Main(string[] args)
        {
            ConfigManager.LoadConfig();
            DataManager.LoadData();

            GameRoom room = RoomManager.Instance.Add(1);

            TickRoom(room, 50);

            // DNS (Domain Name System)
            string      host     = Dns.GetHostName();
            IPHostEntry ipHost   = Dns.GetHostEntry(host);
            IPAddress   ipAddr   = ipHost.AddressList[0];
            IPEndPoint  endPoint = new IPEndPoint(ipAddr, 7777);

            _listener.Init(endPoint, () => { return(SessionManager.Instance.Generate()); });
            Console.WriteLine("Listening...");

            //FlushRoom();
            //JobTimer.Instance.Push(FlushRoom);

            // TODO
            while (true)
            {
                //JobTimer.Instance.Flush();
                Thread.Sleep(100);
            }
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            Console.WriteLine("----- Server -----");

            string      host     = Dns.GetHostName();
            IPHostEntry ipHost   = Dns.GetHostEntry(host);
            IPAddress   ipAdr    = ipHost.AddressList[0];
            IPEndPoint  endPoint = new IPEndPoint(ipAdr, 7777);

            _listener.Init(endPoint, SessionManager.Instance.Generate);

            // 시작 시 일단 작업을 1회 실행한다.
            // 함수 내부에 0.25초 후 재실행하는 로직이 포함되어 있으니 1회만 실행해도 반복된다.
            JobTimer.Instance.Push(FlushRoom);

            while (true)
            {
                // * 수정된 부분
                // 기존처럼 0.25초를 쉬거나 작업마다 실행할 때가 되었는지 확인할 필요가 없다.
                //Room.Push(Room.Flush);
                //Thread.Sleep(250);

                // JobTimer의 실행 함수를 매번 호출한다.
                // 가장 먼저 실행할 함수와의 실행시간 비교 1회만 수행되므로 효율적이다.
                JobTimer.Instance.Flush();
            }
        }
        static void Main(string[] args)
        {
            // DNS 서버를 가지고 옵니다.
            string      host     = Dns.GetHostName();
            IPHostEntry ipHost   = Dns.GetHostEntry(host);
            IPAddress   ipAddr   = ipHost.AddressList[0];
            IPEndPoint  endpoint = new IPEndPoint(ipAddr, 7777);

            _listener.Init(endpoint, () => { return(SessionManager.Instance.Generate()); });
            Console.WriteLine($"Listening...");


            FlushRoom();

            try
            {
                while (true)
                {
                    JobTimer.Instance.Flush();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
        static void Main(string[] args)
        {
            Console.WriteLine("----- Server -----");

            string      host     = Dns.GetHostName();
            IPHostEntry ipHost   = Dns.GetHostEntry(host);
            IPAddress   ipAdr    = ipHost.AddressList[0];
            IPEndPoint  endPoint = new IPEndPoint(ipAdr, 7777);

            _listener.Init(endPoint, SessionManager.Instance.Generate);

            // * 수정된 부분
            // 스레드가 0.25초 쉬는 것이 아니라, Tick을 체크해서 일정 시간이 지났으면 패킷을 보낼수도 있다.
            // 여러 작업이 있다면 체크할 Tick 변수를 추가하면 된다. 코드가 길어지지만 직관적이라는 장점이 있다.
            // 단점은 보내는 주기가 아무리 길어도 매 반복주기마다 Tick을 계산하고 비교하는 작업이 일어난다는 것.

            int roomTick = 0;

            // int ~~Tick = 0;
            // ...
            // ...
            while (true)
            {
                int now = System.Environment.TickCount;
                if (roomTick < now)
                {
                    Room.Push(Room.Flush);
                    roomTick = now + 250;
                }

                // if(~~Tick < now) ...
                // ...
            }
        }
Esempio n. 5
0
        static void Main(string[] args)
        {
            //DNS(Domain Name System)
            //172.1.2.3 이라고 놓으면? 서버가 바뀌었을 때 아이피주소가 바뀔수 있다.
            //도메인을 등록. www.rookiss.com -> 123.123.123.12 이런식으로 하면 관리가 쉬워짐.
            string host = Dns.GetHostName();

            Console.WriteLine($"host:{host}");
            IPHostEntry ipHost = Dns.GetHostEntry(host); //네트워크 망 안의 dns서버가 알려줌?
            // IPAddress address = ipHost.AddressList[0]; //식당 주소.
            // Console.WriteLine(IPAddress.Loopback);
            IPAddress  address  = IPAddress.Loopback;
            IPEndPoint endPoint = new IPEndPoint(address, 7777); //식당 정문? 문의 번호. 문지기 번호.

            listener.Init(endPoint, () => { return(SessionManager.Instance.Generate()); });
            Console.WriteLine("Listening...");

            // FlushRoom();
            JobTimer.Instance.Push(FlushRoom);

            // 주 스레드는 여기가 실행되지만 리스너의 콜백함수는 별도의 스레드에서 실행됨.
            while (true)
            {
                JobTimer.Instance.Flush();
            }
        }
Esempio n. 6
0
        static void Main(string[] args)
        {
            // "게임기획" 데이타 불러오기
            ConfigManager.LoadConfig();
            DataManager.LoadData();

            // 룸 생성
            GameLogic.Instance.Push(() =>
            {
                GameLogic.Instance.Add(2);
            });

            // DNS (Domain Name System)
            string      host     = Dns.GetHostName();
            IPHostEntry ipHost   = Dns.GetHostEntry(host);
            IPAddress   ipAddr   = ipHost.AddressList[0];
            IPEndPoint  endPoint = new IPEndPoint(ipAddr, 7777);

            IpAddress = ipAddr.ToString();

            _listener.Init(endPoint, () => { return(SessionManager.Instance.Generate()); });
            Console.WriteLine("Listening...");

            // StartServerInfoTask
            StartServerInfoTask();

            // NetworkTask
            {
                //Task networkTask = new Task(NetworkTask, TaskCreationOptions.LongRunning);
                //networkTask.Start();
                Thread t = new Thread(NetworkTask);
                t.Name = "Network Send";
                t.Start();
            }

            // DbTask
            {
                //Task dbTask = new Task(DbTask, TaskCreationOptions.LongRunning);
                //dbTask.Start();
                Thread t = new Thread(DbTask);
                t.Name = "DB";
                t.Start();
            }
            // GameLogicTask
            {
                //Task gameLogicTask = new Task(GameLogicTask, TaskCreationOptions.LongRunning);
                //gameLogicTask.Start();
                Thread.CurrentThread.Name = "GameLogic";
                GameLogicTask();
            }
        }
Esempio n. 7
0
        static void Main(string[] args)
        {
            PacketManager.Instance.Register();
            //DNS
            string      host     = Dns.GetHostName();
            IPHostEntry ipHost   = Dns.GetHostEntry(host);
            IPAddress   ipAddr   = ipHost.AddressList[0];
            IPEndPoint  endPoint = new IPEndPoint(ipAddr, 7777);

            listener.Init(endPoint, () => { return(new ClientSession()); });
            while (true)
            {
            }
        }
Esempio n. 8
0
        static void Main(string[] args)
        {
            // DNS (Domain Name System)
            string      host     = Dns.GetHostName();
            IPHostEntry ipHost   = Dns.GetHostEntry(host);
            IPAddress   ipAddr   = ipHost.AddressList[0];
            IPEndPoint  endPoint = new IPEndPoint(ipAddr, 7777);

            _listener.Init(endPoint, () => { return(new ClientSession()); });  // 콜백 방식으로 처리
            Console.WriteLine("Listening...");
            while (true)
            {
            }
        }
Esempio n. 9
0
        static void Main(string[] args)
        {
            //DNS(Domain Name System)
            string      host      = Dns.GetHostName();               // dns를 받아옴
            IPHostEntry hostEntry = Dns.GetHostEntry(host);          // dns를 통해 ip를 받아옴
            IPAddress   iPAddress = hostEntry.AddressList[0];        // ip리스트 중 첫번째 아이피를 받아옴
            IPEndPoint  endPoint  = new IPEndPoint(iPAddress, 7777); // 최종적으로 아이피와 포트번호를 저장

            listener.Init(endPoint, () => { return(SessionManager.Instance.Create()); });
            Console.WriteLine("Waiting...");
            while (true)
            {
                Room.Push(() => Room.Flush());
                Thread.Sleep(250);
            }
        }
Esempio n. 10
0
        static void Main(string[] args)
        {
            string      host     = Dns.GetHostName();
            IPHostEntry ipHost   = Dns.GetHostEntry(host);
            IPAddress   ipAddr   = ipHost.AddressList[0];
            IPEndPoint  endPoint = new IPEndPoint(ipAddr, 7777);

            _listener.Init(endPoint, () => SessionManager.Instance.Generate());
            Console.WriteLine("Listening . . .");

            JobTimer.Instance.Push(FlushRoom);

            while (true)
            {
                JobTimer.Instance.Flush();
            }
        }
        static void Main(string[] args)
        {
            Console.WriteLine("----- Server -----");


            string      host     = Dns.GetHostName();
            IPHostEntry ipHost   = Dns.GetHostEntry(host);
            IPAddress   ipAdr    = ipHost.AddressList[0];
            IPEndPoint  endPoint = new IPEndPoint(ipAdr, 7777);

            _listener.Init(endPoint, () => { return(new GameSession()); });

            while (true)
            {
                // 프로그램 종료 방지를 위한 무한루프
            }
        }
Esempio n. 12
0
        static void Main(string[] args)
        {
            ConfigManager.LoadConfig();
            DataManager.LoadData();

            GameLogic.Instance.Push(() => { GameRoom room = GameLogic.Instance.Add(1); });



            // DNS (Domain Name System)
            string      host     = Dns.GetHostName();
            IPHostEntry ipHost   = Dns.GetHostEntry(host);
            IPAddress   ipAddr   = ipHost.AddressList[1];
            IPEndPoint  endPoint = new IPEndPoint(ipAddr, Port);

            IpAddress = ipAddr.ToString();


            _listener.Init(endPoint, () => { return(SessionManager.Instance.Generate()); });
            Console.WriteLine("Listening.....");

            StartServerInfoTask();

            // GameLogicTask
            {
                Thread t = new Thread(DbTask);
                t.Name = "DB";
                t.Start();
            }

            // NetworkTask
            {
                Thread t = new Thread(NetworkTask);
                t.Name = "Network Send";
                t.Start();
            }


            // DBTask
            Thread.CurrentThread.Name = "GameLogic";
            GameLogicTask();
        }
Esempio n. 13
0
        static void Main(string[] args)
        {
            Console.WriteLine("----- Server -----");

            string      host     = Dns.GetHostName();
            IPHostEntry ipHost   = Dns.GetHostEntry(host);
            IPAddress   ipAdr    = ipHost.AddressList[0];
            IPEndPoint  endPoint = new IPEndPoint(ipAdr, 7777);

            _listener.Init(endPoint, SessionManager.Instance.Generate);

            while (true)
            {
                // + 추가된 부분
                // 0.25초에 한 번씩 쌓인 패킷들을 전송하게 한다.
                // 이 동작 또한 JobQueue를 통해 실행한다.
                Room.Push(Room.Flush);
                Thread.Sleep(250);
            }
        }
Esempio n. 14
0
        static void Main(string[] args)
        {
            ConfigManager.LoadConfig();         // 설정파일 읽어오기
            DataManager.LoadData();             // 설정파일에 맞춰 데이터 불러오기

            // DB Test
            using (AppDbContext db = new AppDbContext())
            {
                db.Accounts.Add(new AccountDb()
                {
                    AccountName = "TestAccount"
                });
                db.SaveChanges();
            }

            GameRoom room = RoomManager.Instance.Add(1); // 서버 시작할때 일단 게임룸 하나 추가, 맵 번호는 1번이라 가정

            TickRoom(room, 50);                          // 생성된 room의 update가 50ms마다 한번씩 실행되도록 한다.

            // DNS (Domain Name System)
            string      host     = Dns.GetHostName();
            IPHostEntry ipHost   = Dns.GetHostEntry(host);
            IPAddress   ipAddr   = ipHost.AddressList[0];
            IPEndPoint  endPoint = new IPEndPoint(ipAddr, 7777);

            _listener.Init(endPoint, () => { return(SessionManager.Instance.Generate()); });
            Console.WriteLine("Listening...");

            //FlushRoom();
            //JobTimer.Instance.Push(FlushRoom);

            // 이렇게 메인 루프 어딘가에서 콘텐츠들을 전부 업댓 시켜주는 코드가 있어야 한다.
            // 이걸 어디서 놓고 돌릴지 매우 햇갈림
            while (true)
            {
                //JobTimer.Instance.Flush();
                //GameRoom room = RoomManager.Instance.Find(1);
                //room.Push(room.Update);
                Thread.Sleep(100);
            }
        }
Esempio n. 15
0
        public static void Main(string[] args)
        {
            // DNS 사용 (Domain Name System)
            // 텍스트 주소를 ip 주소로 변환해주는 서버
            string      host   = Dns.GetHostName(); // 로컬 컴퓨터의 호스트 이름
            IPHostEntry ipHost = Dns.GetHostEntry(host);
            IPAddress   ipAddr = ipHost.AddressList[0];
            // 최종 주소와 포트번호
            IPEndPoint endPoint = new IPEndPoint(ipAddr, 7777);

            _listener.Init(endPoint, () => { return(SessionManager.Instance.Generate()); });
            Console.WriteLine("Listening ..");

            //FlushRoom();
            JobTimer.Instance.Push(FlushRoom);

            while (true)
            {
                JobTimer.Instance.Flush();
            }
        }
Esempio n. 16
0
        static void Main(string[] args)
        {
            // Server PC hostname을 얻어온다.
            string my_host = Dns.GetHostName();
            //MAC주소와 IP주소, hostname을 받아올 수 있는 hostEntry 생성
            IPHostEntry hostEntry;
            //네트워크 끝점을 AddressList[1] IP주소와, 포트번호8887로 나타낸다.
            IPEndPoint endpoint;

            hostEntry = Dns.GetHostEntry(my_host);
            endpoint  = new IPEndPoint(hostEntry.AddressList[1], 8887);

            Listener listener = new Listener();

            listener.Init(endpoint, () => { return(SessionManager.Instance.Generate()); });

            while (true)
            {
            }
            ;
        }
Esempio n. 17
0
        static void Main(string[] args)
        {
            RoomManager.Instance.Add();
            //RoomManager.Instance.Add();
            // DNS (Domain Name System)
            string      host     = Dns.GetHostName();
            IPHostEntry ipHost   = Dns.GetHostEntry(host);
            IPAddress   ipAddr   = ipHost.AddressList[1];
            IPEndPoint  endPoint = new IPEndPoint(ipAddr, 7777);

            _listener.Init(endPoint, () => { return(SessionManager.Instance.Generate()); });
            Console.WriteLine(endPoint.Address.ToString());
            Console.WriteLine("Listening...");

            //FlushRoom();
            JobTimer.Instance.Push(FlushRoom);

            while (true)
            {
                JobTimer.Instance.Flush();
            }
        }
Esempio n. 18
0
        static void Main(string[] args)
        {
            //string host = Dns.GetHostName(); // Local PC 의 Host Name
            string host = "192.168.0.40"; // Local PC 의 Host Name

            Console.WriteLine($"Host: {host}");
            IPHostEntry ipHost    = Dns.GetHostEntry(host);
            IPAddress   ipAddress = ipHost.AddressList[0];              // 여러개 중 하나. Domain 하나에 여러개의 IP가 물린다.

            IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 17654); // 최종 주소

            // 연결 Pipe 생성
            _listener.Init(endPoint, () => SessionManager.Instance.Generate <ClientSession>());
            Console.WriteLine("Listening...");

            FlushRoom();

            while (true)
            {
                JobTimer.Instance.Flush();
            }
        }