패킷 보내시는 부분을 보고 있는데 쪼개서 보낼 때 결국엔 그 정해진 길이에 맞춰서 여러번 보내게 될텐데(예시: 1024 바이트를 최대로 하여 보냄) 그렇게 되면 데이터가 채워져있는 부분을 제외하고 나머지는 0 바이트로 채워져서 보내지는걸로 알고 있습니다. 근데 이게 가끔씩은 패킷에서의 데이터 자체가 0 바이트인 경우도 있을거같은데 이런 경우는 어떻게 판별해주는 방법이 따로 존재할까요?
13:30초 쯤에 T[] newArray = new T[Count * 2]; 대신 _data = new T[Count * 2];를 넣으면 안된다고 하셨는데 1.이유가 _data = new T[Count * 2]; 으로 해버리면 _data가원래 참조하고 있던 new T[deafault_Size]; 가 어떤 인스턴스에도 값을 주고 있지않게 되어 버려서 그런가요? 2.그렇다면 new T[deafault_Size] 값은 어떻게되나요? 자동으로 삭제되는 것인지 아니면 그냥 남아있는지 궁금합니다.
섹션7 강의를 듣고 있습니다. visual studio 2022을 다운받고 windows forms net framework에 들어가 도구 상자에서 button을 선택하려는데 화면처럼 사용할 수 있는 컨트롤이 없다고 나옵니다. 구글에 검색했더니 같은 문제를 겪는 사람은 많았으나 리셋, toolbox.tbd toolbox_reset.tbd toolboxIndex.tbd toolboxIndex_reset.tbd 지우기 등등 모두 시도해보았지만 전혀 되지 않습니다. 모두 보기로 보면 도구들이 표시는 되나 여전히 회색으로 사용할 수 없는 상태입니다. 이 문제를 도대체 어떻게 해결해야 할까요?
M1 콘텐츠 폴리싱 부분에서 다뤄질 예정이었던 부분중에 인벤토리 관련하여 궁금한점이 있습니다. 우루루 용병단과는 달리 개개인의 히어로가 서로 다른 장비를 각각 착용하는 시스템으로 만들거라고 하셨는데요 제가 구현한다면 히어로에 리스트나 딕셔너리로 작은 인벤토리를 각각 들고있게끔 하고 히어로가 아이템의 고유번호를 가지고 있던가 아이템이 히어로의 고유번호를 가지고 있어 해당 번호를 세이브 데이터로 저장하고 불러올때는 착용상태인 아이템 중에서 그 번호를 이용하여 다시 착용하는 방식으로 불러온다 이정도 방법밖에는 딱히 떠오르지 않네요. 루키스님 강의를 보다보면 스킬을 구현하는것은 정답이 없지만 장비관련은 어느정도 현업에서 자주 사용되는 방식이 있다고 들었는데요 선생님께서 생각하시는 정답이 무엇인지, M1 폴리싱 파트에서 구현하실때는 어떤 방식으로 구현하실 예정이셨는지 궁금합니다! 그리고 한가지 더 T2 강의에 대해서 궁금한 점이 있습니다. T2 강의에서는 M1에서 다뤄지지 못했던 결제 우편 어드레서블 관리 등등 기능들에 대한 강의부터 시작하는지 아니면 다시 게임의 토대부터 쌓아가는 작업부터 시작하는 것인지도 궁금합니다.
ASP.NET Core MVC +ASP.NET Core +REST API +.NET 8.0
안녕하세요 선생님 자주... 문의드려 죄송합니다. 로그인에서 가져온 Session 값을 활용하는 방법 DAL 부분의 활용 여부 로그인에서 가져온 Session 값을 활용하는 방법 public async Task<IActionResult> GetUser(GetUserDTO getUserDTO) { if (ModelState.IsValid) { } else { return Redirect("/login/SearchUserId"); } GetUserResponseDTO dto = await loginService.GetUser(getUserDTO); HttpContext.Session.Set("LoginUser", dto); return Redirect("/home/index"); } "LoginUser"으로 세션값을 사용하는 것은 이해했습니다. controller public async Task<IActionResult> GetUserList () { if (ModelState.IsValid) { } else { return Redirect("/home/UserList"); } GetUserResponseDTO ? user = HttpContext.Session.Get<GetUserResponseDTO>("LoginUser"); GetUserListResponseDTO dto = await UserListService.GetUserList(); return Redirect("/home/index"); } service public async Task<GetUserListResponseDTO> GetUserList(GetUserListDTO getUserListDTO) { var configuration = new MapperConfiguration(cfg => { }); Mapper mapper = new Mapper(configuration); Dictionary<string, object> dc = mapper.Map<GetUserListDTO, Dictionary<string, object>>(getUserListDTO); ProcCall procCall = new ProcCall(); DataTable dt = await procCall.RequestProcedure("SP_UserList", dc); GetUserListResponseDTO dto = new GetUserListResponseDTO(); return dto; } 구현하고자 하는 내용. 로그인 해서 나온 데이터를 활용하여 조회 화면을 구성하고자 함 A 등급을 가진 사람한테 -> A-1 화면만 조회하도록 구현하고자 합니다. Session 값을 가져와서 구현하고자 했는데.. 그럼 DTO를 거치면 안 될까요...? DAL 부분의 활용 여부 SP_ 형식을 차용하는데 DAL.Mapper와 DAL.Model 추가적인 사용은 필요가 없을 것 같습니다...? DB와 소통하는 부분으로만 남겨도 될까요?
안녕하세요. Rookiss님. 강의 정말 잘듣고있고 여러모로 도움이 많이 되고 있습니다~!! 감사합니다. :) 다름이 아니오라 새로 진행될 프로젝트 T2 에서 한번 다뤄주셨으면 하는 바람에서 적어봅니다. 1) 방치형 혹은 디펜스 게임에서 유독히 Int32 범위를 넘어서는 큰 수들을 자주 볼수있는데 이 큰 수를 어떤 방식으로 처리하시는지 Rookiss 님의 노하우가 있으신지 궁금합니다. 2) 소규모 개발사들이 서버를 쓴다고 하면 뒤끝을 많이 이용하는 것같습니다. 서버 강좌도 좋지만 개인적으로는 뒤끝을 이용한 서버 운영 노하우(?) 를 배우는것도 실제 프로젝트에 바로 접목 해볼수 있을것 같아 뒤끝 연동으로 진행해주셨으면 하는 바람입니다. 이상입니다~!! 여러모로 고퀄리티의 강의 다시한번 감사드립니다~!! 그리고 T2도 함께 화이팅하겠습니다~!!
안녕하세요 이 강의의 특징은 다른 여타 강의와 달리 컨텐츠 폴리싱, BM, 출시 운영 준비가 특징이라 여타 강의보다 강의료가 비싸도 인정한 커리큘럼이었습니다만 처음에는 7월까지 마무리해서 자료을 올려주신다고 하셨다가 이제는 UI 문제가 생겨 중단이 되고 T2 를 이어 하신다 하셨습니다. 문제는 생길 수 있고 계획은 변경이 될 수 있습니다. 궁금한건 T2에서 m1 때 못한 컨텐츠 폴리싱, BM, 출시 운영에 관한 강의가 포함이 되나요? 답변이 필요합니다.
ASP.NET Core MVC +ASP.NET Core +REST API +.NET 8.0
안녕하세요.현재 `Controller:query string을 통해 데이터 조회` 파트를 시청하고 있습니다. controller에서 userid라고 명시했을 때클라이언트는 userid 또는 userId라고 해도 QueryString이 전달됩니다. 서버에서 queryString의 대소문자를 강제하고 싶을 때는 어떻게 해야하나요?따로 controller에서 하나하나 체크해서 예외처리를 해줘야 하나요?
애니메이터에서 Entry와 처음으로 이어지는 애니메이션이 게임 실행을 하면 바로 실행이 되는데 그것이 아니고 제가 원하는 때에 애니메이션을 실행하고 싶다면 먼저 Entry에서 바로 이어지는 애니메이션의 Motion 부분을 비워두고(None) 트랜지션으로 이어지는 다음 애니메이션부터 제가 원하는 애니메이션을 넣으면 될까요? (예를 들어 영상에서 예시로 박스가 움직이는 애니메이션을 만드신 것처럼 게임을 시작하자마자 바로 애니메이션이 재생되는 것이 아니라 재생되지 않게 만드는 방법 중 어느 방법이 제일 좋은 방법인지 궁금합니다)
좋은 강의 우선 너무 감사드립니다. ㅜㅜ 23:34 이후 부터 Recv 관련 내용을 듣다가 궁금한 부분이 있어서 질문드립니다. (1) OnAcceptHandler의 전체 코드를 살펴보면 클라이언트와 접속이 된 이후 수신 / 송신 이후 클라와의 연결을 끊어버리는데 (session.Disconnect() -> Shutdown, Close), OnRecvCompleted 내 RegisterRecv를 다시하더라도 클라쪽에서 보내는 데이터를 미처 다 수신받기 전에 끊겨질수 있지 않나요? 서버가 클라와의 연결을 끊을려고 할때 (Shutdown, Close) 클라쪽에서 보낸 데이터가 남아 있을 경우 바로 끊지 않고 비동기 수신 함수로 등록된 결과를 모두 처리하고 끊는걸로 이해하면 될까요? (2) 다시 낚시대를 던지는 행위 ? 가 결국은 클라와 연결이 된 이후 클라쪽에서 한번에 여러개의 패킷을 send를 하기 때문으로 이해가 되는데, 만약 클라가 연결이 된 이후 한 개의 패킷만 전달한다는 정책이라면 따로 OnRecvCompleted 내 RegisterRecv를 하지 않아도 될까요?
안녕하세요, 루키스님. 좋은 강의를 제공해주신 것에 대해 항상 감사드립니다. 기존에는 서버의 코어 부분은 건드리지 않고 컨텐츠 부분만 직접 수정 및 추가하며 클라이언트와 연동해보는 사이드 프로젝트만 진행해보았고, 서버 코어 부분에 대하여 좀 더 깊게 이해를 해보기 위해 다시 정주행을 하는 중 입니다. 이유는 모르겠지만, 같은 내용의 강의를 계속해서 볼 때마다 점점 이해되는 범위가 달라지는 것이 느껴지는 것 같긴 하네요.. 이번에는 최대한 운영체제 같은 윗 분들의 사정(?)을 고려해보며 이해를 해보며 접근을 해보려고 하는데요. 그러다 보니 몇 가지 의문점이 생겨 질문 드립니다. 1. 세션코드에서 Send부분에 lock안에서 enqueue를 하는 이유는 TCP 통신의 순서를 보장하기 위해서 인가요? 2. Recv부분은 왜 lock이 안걸려있는지 이해가 되지 않습니다. 검색해보거나 다른 분들 질문을 참고해보면, ReceiveAsync 부분이 1개의 스레드만 접근하는 것을 보장하기 때문이라고 하시는 것 같은데요. 이 부분은 소켓API 부분에서 보장해주는 건가요? 그렇다면 다른 SendAsync와 같은 부분과 다르게 버퍼를 읽던 중 다른 수신을 받게 되어도, 수신을 처리하는 스레드가 스레드풀에서 제공되는 것이 아닌, 현재 수신을 처리 중인 스레드가 완료 될 때 까지 어딘가에서 대기하고 있다가 한 번에 처리되는 건가요? 3. PacketSession의 OnRecv 부분에서 BitConverter.ToUInt16 메서드가 메서드 자체적으로 바이트 배열의 시작하는 인덱스에서 '2바이트'만큼을 부호없는 정수로 바꾸는 메서드라고 알아보았는데요. 메서드 자체에서 '2바이트'라고 지정해둔 것은 보편적으로 패킷의 크기를 나타내는 헤더를 2바이트로 정하기 때문인가요? 4. 위처럼 OnRecv에서 패킷이 온전하게 도착하지 않았을 때, 단순히 writePos만 옮겨진 상태로 다음 패킷을 받을 때까지 기다리기만 해도 되는 것은, TCP 통신 자체가 '순서를 보장하기 때문에 앞에서 온전하게 받지 못한 패킷에 대해서 다른 패킷보다 먼저 다시 보내주고', '온전하게 도착하지 않은 부분에 대해서만 보내주기 때문'일까요? 그리고 그렇다면 위처럼 순서를 보장해주고, 상대가 어디까지 받았는지, 어디를 못 받았는지 판단하는 것은 운영체제에서 알아서 처리되는 건가요? 만약 상대가 못 받았을 경우 다시 보내줘야 한다면, 커널에서 패킷을 송신한 뒤에도 상대가 온전하게 받았다고 신호하기 전까지는 커널 상의 버퍼에 해당 패킷을 계속 저장해두고 있으려나요? 5. ArraySegment를 사용할 때, Array를 통해 배열의 시작 위치를 넘기고 어떤 위치부터 조회할 지(?) 조회할 위치를 넘기는 부분이 Offset인 것 같은데요. Offset을 0으로 두고 readPos및 writePos나 DataSize, FreeSize 등을 통해 패킷 시작 위치나 범위를 지정해주는 것은 Offset 값을 변경하며 이를 컨트롤 하는 것이 복잡하기 때문인가요? 처음 강의를 수강할 때에 비하면 강의 내용이 점점 머릿속에 그려지고 구조와 흐름이 얼추 잡혀가는 느낌이지만, 누군가가 "너 한 번 혼자서 서버 만들어봐!!"라고 한다면 강의를 참고하거나 구글링 없이 혼자 서버 코어 단을 만들 수 있을 거라는 엄두가 나질 않는데요. 6. 4년제 학부 졸업생의 수준에서 서버 코드를 보고 이 부분은 왜 이렇게 작성된 것인지, 어떤 흐름으로 코드가 실행되는지 정도만 이해하면 게임 서버 프로그래머로 취업하기엔 충분할까요...? 아니면 정말 혼자 서버 코어 부분을 작성할 수 있을 정도가 되어야 하는건가요? 강의 들으며 궁금했던 부분을 싹 모아서 정리해보니 장문의 질문이 되어버렸네요 죄송합니다 ㅠㅠ 다시 한 번 좋은 강의 제공해주셔서 정말 감사합니다.
안녕하세요. 강의를 보던 도중 PostgreSQL을 설치하라고 하셔서, 수업 노트에 남겨두신 다운로드 url 링크를 타고 들어갔습니다. 해당 사이트에서 가장 최신 버전부터 하나씩 다 다운로드 해서 exe 파일을 모두 실행 시켜봤지만,,, Setup 설치 창 자체가 display되지 않습니다..