게임 서버와 인터페이스하는 작은 클라이언트에서 작업하고 있습니다. 서버는 HTTP를 통해 연결된 클라이언트에게 메시지를 전송합니다. 클라이언트로 들어오는 텍스트 메시지를 구문 분석하고 답장을 보내서 비교적 쉽게 되돌릴 수 있습니다. 내가 알아 내기 위해 노력하고있어 이제 어떻게다양한 유형의 메시지를 처리하는 일반적인 방법
는 과정을 파괴하는 방법입니다. 스레드가 메시지를 받고, 일부 데이터 개체로 파싱 한 다음이를 처리 할 "수신"큐에 배치하려고합니다. 그런 다음 다른 스레드가이 큐에서 메시지를 읽고이를 처리 (클라이언트의 두뇌 또는 AI) 한 다음 서버에 응답을 보냅니다.
는 그 오버 헤드가없는 (등 메시지를 헤어지고, 밖으로 중요한 데이터를 가져) 텍스트를 처리 할 들어오는 데이터를 감시 스레드 때문에 AI 스레드를 갖고 싶어. 그러나 문제는 서버가 몇 백 가지 유형의 메시지를 클라이언트에 보낼 수 있다는 것입니다 (클라이언트가 볼 수있는 것, 다른 플레이어, 발사하는 경우 등). 이 데이터를 깔끔한 작은 구조로 묶어서 AI가 신속하게 처리 할 수 있도록하고 AI를 쉽게 다시 작성할 수있게하려고합니다.
하지만 어떻게 내가의 큐 뭔가를 잡아 당기은 메시지의 유형을 알 수있는 함수를 작성 않는 (그래서 메시지에 포함되는 데이터 내가 아는)?
예 메시지 :
이살아 (당신이 살아있는 경우를 말한다) 그것은 단지 하나의 데이터 객체 (당신이 손상된 경우 알려줍니다)
DAM는 현재 게임 시간이
데이터가 풍부하고, 누가 당신을 손상 시켰으며, 얼마나 많은데, 총이 무엇인지, 볼 수 있다면, 등이 있습니다.
개체를 만들 수 있습니다. at는 이러한 다양한 메시지 유형을 모두 처리 할 수 있으며 단일 함수로 해석 할 수 있습니까?
내가 여기에 전체 솔루션을 찾는 게 아니에요이 딱 맞는 날 지점 ... 거의 메시지는 공통 속성을 가지고, 그래서 상속 또는 하나 개의 정말 큰 메시지 클래스는 아주 좋은 것입니다하게 생각하지 않는다 방향과 희망 나는 당신이 프로토콜이라고에 대해 요구하고 기본적으로 무엇을
이것을 프로토콜이라고합니다. 어려운 방법은 자신을 정의하는 것입니다. 쉬운 방법은 라이브러리를 사용하는 것입니다. 내가 프로토콜 버퍼 (Google) 또는 절약 (페이스 북에 의해)을 제안 할 수도 ... –
@Chris - 최고. 나는 Google의 프로토콜 버퍼를 사용할 것이라고 생각합니다. 답변에 댓글을 남기고 싶다면 – Veaviticus