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); } }
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) ... // ... } }
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(); } }
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(); } }
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) { } }
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) { } }
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); } }
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) { // 프로그램 종료 방지를 위한 무한루프 } }
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(); }
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); } }
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); } }
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(); } }
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) { } ; }
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(); } }
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(); } }