월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Handler 질문 + 11분 질문
강사님이 13분 쯤에 실행 하는 부분에서 똑같이 cmd창에 10명이 입장은되는데 클라에서 보낸 메세지를 서버가 받아서 BroadCast하는 부분이 계속 호출이 안되었었습니다. 거의 3시간동안 뭐가 문제지?? 하다가 찾은 부분이 Server > PacketHandler부분에서 C_chatHandler부분이 이렇게 ClientSession clientSession = new ClientSession(); 되어 있어서 if문에 걸려서 그냥 return 을 해버린거 같은데 인자에 받은 session을 new ClientSession()으로 하게되면 새로 "빈" 갓난아기의?? ClientSession을 다시 만들어 버리기때문에 ClientSession의 Room이 항상 비어있는 상태라 retrun 으로 끝내버리게 되어서 ServerSessionManager의 Register하는 부분에서 _onRecv를 한다음 어떤 행동을 할것인가 == _handler 부분에서 매핑해놓은 C_chatHandler가 호출 되기는 하지만 new ClientSession 때문에 if에 걸려서 바로 return 을 하게 되어서 클라에 뿌려줄 수가 없었다.... 그래서 new ClientSession을 하면 안되고 여기서 이어서 받이온 session을 ClientSession으로 캐스팅을 하고 (안에 정보가 있으니까) 이어서 사용을 해야한다. 라고 이해를 했는데 어느정도 맞는 흐름일까요..??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
코드오류 2
영상 17:38에 똑같이 작성했으나 오류가 발생해 왜 오류가 발생했는지 모르겠습니다.. 해결방법좀 알 수 있을까요
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
코드 오류
session #4 강좌의 15:45초 부분을 같이 따라했더니, 다음과 같은 오류가 발생했습니다.. 해결방법을 알려주실 수 있을까요? 의는 1:1 문의하기를 이용해주세요.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
7분 질문
현재 2022 버젼인데 프로젝트 파일은 이경로 있구요 PacketGenerator를 들어가보면 현재 이런 상태입니다 그런데 속성에 들어가서 이런식으로 출력 경로를 바꾸어 주어도 강사님이 하신것처럼 bin 산하에 생성이 안됩니다 .. 메모장으로 Append이거도 똑같이 했는데두요 오히려 이런 이상한 파일이 더 생겨 버렸습니다 ㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
AcceptAsync 이후 pending 관련
void RegisterAccept(SocketAsyncEventArgs args) { args.AcceptSocket = null; bool pending = _listenSocket.AcceptAsync(args); if (!pending) { OnACceptCompleted(null, args); } } 위 Function에서 보면 pending == false 인경우 OnACceptCompleted 함수를 바로 실행시키는데요 init 함수에서 SocketAsyncEventArgs args = new SocketAsyncEventArgs(); args.Completed += new EventHandler<SocketAsyncEventArgs>(OnACceptCompleted); RegisterAccept(args); 위와같이 args.Completed에 OnACceptCompleted를 등록해 주었기 때문에 펜딩이 안되어 바로 Accept가 된 상황에서도 등록한 이벤트로 인해 OnACceptCompleted 가 실행되는것 아닌가요? if (pending == false) { OnACceptCompleted(null, args); } 이 코드는 불필요 한게 아닌가 궁금합니다. 실제로 로그를 찍어보면 서버가 AcceptAsync를 하는 시점과 클라이언트가 접속하는 시간 차이가 있어서 pending이 항상 true로찍혔고 그래서 pending이 false일때에 대한 상황은 재현하지 못했습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
jobQueue 질문 드립니다.
jobQueue 를 두는 이유가 기존에 thread 가 많아서 context-switching 비용이 더 비싸기 때문인가요? thread 숫자가 줄어서 결국 context-switching 비용을 아끼고 그만큼 성능이 빨라지게 되는 건지요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
11:41초 질문
이부분에서 Slice의 용도가 BitConverter.TryWriteBytes(s.Slice(count, s.Length - count), nameLen); 를 하게 되면 s에다가 s의 offset은 count이고, s.Length - count만큼 자른부분에서 nameLen을 넣겠다! 이고 이게 성공을 하면 true 실패를 하면 false로 내뱉어 주는 것인가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
SessionManager Find 질문 입니다.
find 시 lock 을 잡아야 하나요? write 아니고 read 라면 안잡아도 되지 않나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의와 상관없는 질문
FMOD failed to initialize. This may be because your sound card is configured to give applications exclusive access, thus preventing Unity from using this device. You can change this in Control Panel > Audio Devices and Sound Themes > Playback Device > Properties > Options ... : "Soundcard does not support the minimum features needed for this soundsystem (16bit stereo output). " (59) 안녕하세요. 강의와 상관없는 질문이긴 하지만 검색해도 안나오길래 질문해봅니다. 스피커를 바꾸고 바로 유니티엔진을 켰는데 위 에러가 뜹니다. 구글검색해도 안나오고 뭐 어찌해야할지 모르겠습니다.. 혹시 해결책을 아시는지 궁금합니다
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
9분 OnRecv질문입니다.
Session에서 OnRecv부분 while문 안에서 "패킷이 완전체로 왔는지"에대한 부분 질문입니다. 현재 OnRecv애서 buff를 받고 첫번째 if 문에서 buff.Count < HeaderSize보다 작으면 break;이기때문에 buff.Count는 첫번째 if문을 통과를 했다면 2byte이상인 상태이고 두번째 if문은 이부분인데 Bitcinverter.ToUInt16이 첫인자로 받은 바이트 배열을 buffer.Offset부터 시작해서 ushort형으로 뽑아서 준다는 것 까지는 이해했습니다. 그런데 더미나 서버에서 패킷을 처리하기 위해서 OnRecv를 받을때 OnRecv에 받은 buff가 4바이트일 수도있고 3바이트 일 수도 있고 2바이트 일 수도 있는데 Bitcinverter.ToUInt16(buff.Array, buff.Offset)을 dataSize에 넣는다고 이게 왜 완전체인 패킷을 받는 다는 것인지 이해가 가지 않습니다. < 가장 햇갈리는 부분 > OnRecv에는 인자로 buffer를 받았는데 결국, dataSize가 BitConverter를 통해서 받아온 buffer의 offset부터 buffer.Array(buffer의 크기)를 뽑아온 값(맞나요..?) 즉, BitCinverter.ToUInt16(buffer.Array, buufer.Offset)을 통해 뽑아온 dataSize는 (값은) 결국, OnRecv에 인자로 받은buffer의 크기 ( == buffer.Count)와 같은거라 if (buffer.Count < dataSize)일때 break;가 아니라 if (buffer.Count != dataSize) 일 경우 break;를 하는게 맞는 부분 아닌가요?? (인자로 받은 buffer.Count랑 buffer.Length가 같은말이고 BitConverter.ToUInt16(buffer.Array, buffer.Offset)이 다 같은 말이라)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
15분 질문입니다.
지금 초기화부분 (init에서) 먼저 등록을 해주고 pending이 false이면 OnAcceptCompleted를 호출을 할 것이고 pending이 true라면 이부분에서 자동적으로 OnAcceptCompleted를 호출한다고 하셨는데 args.Completed += new EventHandler<SocketAsyncEventArgs>(OnAcceptCompleted); 이부분이 args의 Compledted함수에서 응답(액션같은게 오면) OnAcceptCompleted 함수를 부르겠다(콜백하겠다) 의미까는 이해가 갔습니다. 그런데 궁금한것이 pending이 true일 경우 자동적으로 OnAcceptCompleted 호출한다는 말씀이 무었인지 잘 이해가 안갑니다. 1) 번질문 SocketAsyncEventArgs args = new SocketAsyncEventArgs();를 init에 만들어 주고, RegisterAccept에서 _listenSocket.AcceptAsync(args); 하게 되면, false인지 true인지를 pending에다가 뱉어주는데 true일 경우에 args.Completed함수에 EventHander라는 액션이 가게 되어 callback으로 등록해둔 함수가 호출이 되는 것인가요? 2)번질문 만약, 1)번에서 질문 한 내용이 맞다면 args.Completed += new EventHandler<SocketAsyncEventArgs>(OnAcceptCompleted); 한 이유는 AcceptAsync(args);했을 때 true가 나오면 Completed함수가 자동으로 호출이 된다는 말씀이신가요? 3) 번질문 제가 1), 2)번 질문의도나 이해 방향이 틀렷다면 그냥 간단하게 생각해서 bool pending = _listenSocket.AcceptAsync(args);를 해주는 순간 pending이 false이면 if (pending == false) OnAcceptCompleted(null, args); 이대로 가는 것이고 pending이 true일 경우 AcceptAsync에 인자로 넣은 args에 EventHandler? 가 true라고 args의 Complete함수에 알려주는 것인가요? 4)번질문 제가 Completed에 뭔가 액션이 오면 콜백으로 OnAcceptComplete를 호출하는 것은 이해를 했는데, pending이 true일 경우 args.Completed함수에 액션이 어떻게 Completed 가게되어지는지를 조금 이해가 안되는데 이부분은 제가 콜백을 이해를 못한것인가요? 아니면 args가 어떻게 동작하는지 아직 이해를 못해서 그런것인가요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
17분 질문
ThreadPool.SetMinThreads(1, 1); ThreadPool.SetMaxThreads(3, 3); Parallel.Invoke(WhoAmI, WhoAmI, WhoAmI, WhoAmI, WhoAmI, WhoAmI, WhoAmI); 이런식으로 Min, Max를 설정해주었기 때문에 Parallel.Invoke 가 threadPool에서 아무 쓰레드나 뽑오와서 일을 시키는데 그 과정에서 1번쓰레드가 일을 끝내고 다시 threadPool에 있는 상태에서 다시 parallel가 1번 쓰레드에게 다시 일감을 던져주게 되어 같은 ManagedThreadId 가 cmd창에 찍혀서 나오게 되는 것인가요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
8분 Bit Flag질문
0. Thread.CurrentThread.ManagedThreadId 가 1씩 늘어나는 그런 숫자라고 해주셨는데 이게 무슨말인지 모르겠습니다. 1. 쉬프트 연산자를 사용을 할때, Thread.CurrentThread.ManagedThreadId << 3 을 하게되면 이런 의미인것인가요 아니면 3번째 칸만 켜주는 이런 의미가 되는 것인가요? 2. 만약 Thread.CurrentThread.ManagedThreadId << 3 라는 의미가 첫번째 질문의 원리와 같다면 이런상태라 가정하였을때 다시 Thread.CurrentThread.ManagedThreadId << 3를 하게되면 이런식으로 바뀌는 것인가요?? 3. 현재 if (_flag == EMPTY_FLAG)일 경우 WriteThreadID은 15비트를 켜진상태 ( 1인 상태를) 가져오고 싶은것이 맞다면 Thread.CurrentThread.ManagedThreadId << 16 이렇게 밀어버리게 되면 이렇게 되는것이 맞나요? 3-1. 이렇게 되는 것이 맞다면 (Thread.CurrentThread.ManagedThreadId << 16 뒤에 & WRITE_MAKS; 이녀석은 Thread.CurrentThread.ManagedThreadId << 16 && Thread.CurrentThread.ManagedThreadId << WRITE_MASK 라는 뜻인가요?? 3-2 Thread.CurrentThread.ManagedThreadId << 16 && Thread.CurrentThread.ManagedThreadId << WRITE_MASK 라는 뜻이 맞다면 Thread.CurrentThread.ManagedThreadId << 16 로 이렇게 한번 밀어주고 Thread.CurrentThread.ManagedThreadId << WRITE_MASK로 이렇게 밀어주게되면 Unused(1)이 나오게 되는것 아닌가요..?? 4. 비트 마스크 ex) 1 << 5를 하면 1 << 10을 하게되면 이런 기초적인 것은 이해를 했는데 위에 질문드린 부분들이 이해가 안갑니다 ㅠ 제가 완전히 잘 이해를 이상하게 하고 있는거 같습니다..ㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
3:00분 질문, 11:20초 질문
1. SpinLock이 구현이되어있는것을 사용하시면 된다고 하셨는데 bool _lockTaken = false; _lock.Enter(ref _lockTaken); 을 해주게되면 _lockTaken 이 false일 경우에는 ( == 아무도 자물쇠를 안잠군 상태이다) Enter가 true를 _lockTaken 이 true일 경우에는 ( == 누군가 자물쇠를 잠구었다) Enter가 false를 반환하는 것인가요? 2. 왜 Reward 클래스를 찾는 함수안에서 보상 아이템을 추가한다고 해서 lock 키워드를 저기서 사용을 하는지 잘 이해가 가지않습니다...
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
서로 다른 pc에서 통신이 안되네요
안녕하세요! 하나의 pc에서는 잘 통신이 되는걸 확인했는데요. 위 제목대로 서로 다른 pc에서는 통신이 되질 않네요. 서버 pc cmd의 ipconfig 창에 나온 IPv4 주소, 기본 게이트웨이를 다 입력해봤는데도 안됩니다. 서로 다른 pc를 통신하려면 어떻게 접근해야할까요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
서버에서 반응이 없습니다
사진처럼 서버코어 쪽에서 아무런 반응이 없습니다. 아무리봐도 잘못된 곳이 없어 보이는데 저런 경우 코드 어디를 살펴봐야 할까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강사님 질문이 있습니다
현재 이강의를 보려는 목적이 인디게임개발쪽으로 쓸려고 하는데요, 제가 직접코드를 짜서 서버를 구성해보는게 좋나요 아님 강사님코드를 이용해서 제 게임에 적용하는게 좋을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강사님 커리큘럼 질문입니다.
현재 C# Part1~3까지 듣고 게임서버를 들으면서 1:1 로 대결을 할 수 있게 게임을 공부겸으로 C# && 유니티로 만들고 있습니다. 그런데 혼자 공부하다 보니 제가 어디로 가고있는지 방향은 어느정도 맞는지 잘 몰라서 찾아보다가 강사님 강의중에 "게임프로그래머 취업전략 가이드"라는 강의를 듣고있는데 저는 취업이 목적인데(물론 최종 목표는 정말 재밌는 RPG 게임을 만드는 것이 목표입니다 누구에게나 재밌다고 인정 받을 만한 게임이용..ㅎㅎ;) 현재 C#으로 게임을 만들고있습니다. 저는 강사님 말대로 "클라" "서버" 둘다 공부하는것이 좋다고 생각하고 저한테도 도움이 될거 같아서 둘 다 공부를 목적으로 하고있습니다.(22학년도 부터 대학교 3학년입니다) 그래서 강사님 강의가 저한테는 잘맞아서 언리얼로 빨리 실력을 쌓고 싶어서 생각한 저만의 커리가 1. part4까지만 듣고 "c++ 훑어보기" , "언리얼 엔진4 입문" -> "c++과 언리얼로 만드는 MMORPG" 시리즈 듣기 + 현재 만들고 있던 게임은 만들기 2. 현재 강의 시리즈(C#) part4 게임서버 마저듣고 part5~7? 까지 다듣고 "c++ 훑어보기" , "언리얼 엔진4 입문" -> "c++과 언리얼로 만드는 MMORPG" 시리즈를 듣는것 둘중에 어떤 커리가 클라+서버를 공부하는데 효율적일까요..?? (저는 물론 취업을 할 때 클라쪽으로 먼저 가고싶고 클라쪽에 조금더 관심이 많습니다) 둘다 강의 커리가 조금 이상하시다면 다른 추천? 할만한 커리가 있을까요??(강사님 강의중에) 조언을 조금 받을 수 있다면 정말 정말 감사하겠습니다 :)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 궁금한 점이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 클라에서 서버로 액션 요청 하고 로직 처리 후 클라로 응답 받는 시간이 어느정도되어야지, 지연 없이 받았다고 생각하면 될까요??
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
flush에 대한 질문입니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 flush 쪽에서 의문이 생겨서 이렇게 글 남겨봅니다..! 강의에서는 Push 안에 bool flush = false를 이용하는데 따로 flush를 더 사용안하고 위 이미지처럼 그냥 _flush 만 이용하면 안되는 이유가 따로 있을까요..? 강의에서는 lock때문에 접근을 못해서 단계적으로 하기 위함이라고 하셨는데 이해가 잘 안갑니다..