묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
GameRoom 관련 질문입니다.
아무리 보고 또 봐도 생각을 아무리 해봐도 이해가 잘 안돼서 질문 남깁니다. 질문이 너무 잦아 부끄러운 마음이 먼저 드네요..ㅠ class ClientSession : PacketSession { public GameRoom Room { get; set; } public override void OnConnected(EndPoint endPoint) { Console.WriteLine($"OnConnected: {endPoint}"); Program.Room.Enter(this); // 1 } public override void OnDisconnected(EndPoint endPoint) { SessionManager.Instance.Remove(this); // 2 if (Room != null) { Room.Leave(this); Room = null; } Console.WriteLine($"OnDisconnected: {endPoint}"); } ... OnConnected 메소드에서 주석 1번과 OnDisconnected 메소드에서 주석 2번 영역인데요. OnConnected 에서는 Program 의 Room에 입장을 시키는데 어째서 OnDisconnected 에서는 Room에 Leave를 하는지 아무리봐도 모르겠습니다.코드대로 읽어보면 Enter는 Program영역이고 Leave는 ClientSession의 영역이라 서로 다른 처리를 하고있는게 아닌가 하는 생각이 들고요. 또 하나 신기하면서도 이해가 안되는 부분은 public static void ClientChatHandler(PacketSession session, IPacket packet) { ClientChat chatPacket = packet as ClientChat; ClientSession clientSession = session as ClientSession; // 여기! if (clientSession.Room == null) return; clientSession.Room.Broadcast(clientSession, chatPacket.chat); } clientSession에는 Room을 넣어준 적이 없는데 if를 통과하는 부분이에요. 분명 어디선가 초기화가 되고 있다는 뜻인데 암만 봐도 모르겠습니다... ㅠ 심지어 ClientSession의 Room 은 초기화 되는 곳이 그 어느곳을 찾아봐도 없어요.ㅠ
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
캐스팅 질문 드려요.
Connect 구현 중에 캐스팅 코드관련해서 궁금한 것이 있습니다. 명시적 캐스팅을 진행할 때 Socket socket = (Socket) args.UserToken; 이렇게 진행한다고 배웠는데 Socket socket = args.UserToken as Socket; as 키워드로 하는 캐스팅이 나와 당황스러웠어요. 둘 차이점이 있나요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ReaderWriterLock 구현 연습 파트 질문입니다!
ReadLock() 작성 중에 조건이 아무도 WriteLock을 획득하고 있지 않으면 ReadCount를 1 늘린다 라서 if ( (_flag & WRITE_MASK) == 0 ) 이 코드는 이해하겠는데 Interlocked를 사용하면서 이 부분이 사라지고 int expected = (_flag & READ_MASK); if (Interlocked.CompareExchange(ref _flag, expected + 1, expected) == expected) return; 이렇게 작성이 되었는데요. 이러면 WriteLock 체크를 무시하는 것이 아닌가요? 코드로만 보면 WriteLock 영역은 모두 0으로 날려버리는 것이니 WriteLock이 있던 없던 그냥 Read 하겠다라고 이해되어서요.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ReaderWriterLock 강의 10분 47초 쯤 나오는 Reward 예시에 대해 질문이 있습니다.
ReaderWriterLock 강의 10분 47초 쯤 나오는 Reward 예시에 대해 질문이 있습니다. Reward 예시에서 GetRewardById(int id) 를 설명하시면서, 운영 툴로 보상을 지급해야 할 때, lock이 필요하다 라고 말씀하셨었는데 애초에 MMORPG를 잘 안해서 와닿지 않는 것 같아요. 장기적으로 본다면 게임내의 캐릭터가 가지고 있는 아이템들은 DB로 관리될 것이라 생각되는데, 왜 Lock이 필요한 것인지 이해가 잘 되지 않아요. 메모리 배리어 파트의 Store, Load 와 관련된 것 이라면 DB와 무관하게 실시간으로 캐릭터에게 지급이 된다라고 이해한다면 맞는것 같은데 이렇게 생각하는게 맞는건가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
궁금합니다
락의 기초에서 배웠던 lock함수를 써야할때와 스핀락을 써야할때가 어떻게 다른가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Init 메서드
혹시 생성자 메서드를 사용하지 않고 Init 메서드를 만들어서 사용하는 특별한 이유가 있나요? 그냥 코딩 스타일인가요?
-
미해결R로 하는 네트워크 분석
LDA 이미지 저장
for (i in 8:12) { q_lda <- LDA(dtm, k=i) q_topics <- tidy(q_lda, matrix="beta") q_top_terms <- q_topics %>% group_by(topic) %>% top_n(15, beta) %>% ungroup() %>% arrange(topic, -beta) q_top_terms$term<-repair_encoding(q_top_terms$term) tau<-tapply(q_top_terms$term,q_top_terms$topic,table) png(paste0("nate",i,".png"),width=500,height = 500) q_top_terms %>% mutate(term=reorder(term, beta)) %>% ggplot(aes(term, beta, fill=factor(topic))) + geom_col(show.legend=FALSE) + facet_wrap(~ topic, scales="free") + coord_flip() + theme(axis.text.y=element_text(family="HYGothic-Extra")) dev.off() key<-c(sapply(tau,names)) key_list[[i]]<-key[!key %in% stw] } 이렇게 코드를 돌리면, 파일은 생기는데, 이미지는 저장되지 않습니다. 왜 그런건가요?
-
해결됨누구나 시작할 수 있는 네트워크 Step 1 (네트워크 모델)
마무리 Review
마무리 Review강의가 실행되지 않는데 문제가 생긴건가요?