원시 이진 메시지 (매우 간단합니다. 첫 번째 바이트는 메시지 유형이고 나머지는 페이로드입니다)를 사용하는 응용 프로그램에서 작업하고 있습니다. 내가 달성하고자하는 일은 네트워킹 서비스가 나머지 응용 프로그램에서 추상화되어 프로토콜을 지금 수정 한 다음 나머지 응용 프로그램에 너무 많은 영향을주지 않도록 허용하는 것입니다. 응용 프로그램의 컨텍스트는 매우 간단한 클라이언트 - 서버 게임입니다. 지금 클라이언트 작업을하고 있습니다.네트워크 프로토콜 캡쳐
저는 지금 다소 고심하고 있습니다. 예쁜 객체를 반환하는 일종의 번역기/어댑터 서비스에 연결을 던지는 우아한 방법을 찾아야합니다 (필자는 생각합니다). 이러한 객체는 나머지 앱에서 소비를 기다리는 대기열에 던져 질 것입니다. 내가 직면하고있어 문제는 더 많거나 적은이 구조 (의사 코드) :
는의 각 메시지는 20 바이트 가정 해 보자, 그래서 각 20 바이트이 함수 호출을 처리 할 수 있습니다
public Message GetMessage(byte[] buffer)
{
switch(buffer[0])
{
case 1:
return Message1(...);
case 2:
return Message2(...);
.....
case n:
return MessageN(...);
}
}
을 당연히 케이스에 상수 나 상수를 사용 하겠지만 그것이 나를 괴롭히는 것은 아닙니다. 여기 있습니다. 약 50 가지의 메시지 유형이 있다고 생각합니다. 이는 50 가지의 사례로 switch 문을 사용할 수 있음을 의미합니다. 나는 이것을 작은 조각으로 잘라내는 적절한 방법을 생각할 수 없다. 이것은 거대한 오류가 발생하기 쉬운 방법이 될 것이다. 내가 이것을 찾을 수 없기 때문에 이것을 더 쉽게 만들 수있는 패턴이 있는지 궁금합니다.
미리 감사드립니다.
이것은 별도의 핸들러 클래스를 포함하여 내가 선택한 옵션입니다. 각 개별 메시지를 처리하는 로직 비트를 분리하는 가장 좋은 방법 인 것 같습니다. –
네드 플랑드르 (Ned Flanders)가 말했듯이, 당신은 책으로 모든 것을하고 있습니다. –