Ask Your Question
0

Protobuf Message 에서 로그 출력 문의(2016-06-21, steve.lee)

asked 2016-11-30 17:25:01 +0900

inkeun.kim gravatar image

[Protobuf Message]

// 메시지 핸들러로 전달되는 body는 FunMessage 객체입니다.

FunMessage msg = body as FunMessage; 

// Extend 된 메시지 타입을 GetMessage를 통해 얻어옵니다. 
object obj = FunapiMessage.GetMessage(msg, MessageType.pbuf_echo); 

// PbufEchoMessage 메시지의 msg 값을 로그로 출력합니다. 
PbufEchoMessage echo = obj as PbufEchoMessage; 
DebugUtils.Log("Received an echo message: {0}", echo.msg);

위 글은 도움말에 있는 내용입니다. msg 하나만 있을 경우는 위와 같이 하면되는데 message 마다 넘어오는 값도 다 틀려서 일일이 하기 힘들어요. Protobuf Message 를 json 으로 출력은 할 수 없나요? echo.to_json() 이런 식으로

edit retag flag offensive close merge delete

5 answers

Sort by » oldest newest most voted
0

answered 2016-11-30 17:27:37 +0900

inkeun.kim gravatar image

Answer by arin · 2016-06-22 AM 05:09

안녕하세요. 아이펀팩토리 이은희입니다.

서버로부터 받은 Protobuf 메시지를 Json으로 변경하려고 하시는 건가요?? 예제는 Protobuf를 붙이셨는데 문의는 Json을 물어보셔서...

서버로부터 받은 Json 메시지의 파싱이 안되는 거라면... 클라이언트 플러그인에서 사용하는 Json은 기본적으로 MiniJSON을 사용하고 있습니다. Unity의 JsonUtility를 사용하시려면 JsonAccessor 클래스를 상속 받아 그 안에서 JsonUtility를 사용하는 새로운 JsonAccessor 클래스를 구현하셔서 FunapiMessage.JsonHelper에 Accessor를 지정해주셔야 합니다. (플러그인 최신 버전 기준. 최근에 JsonHelper의 위치가 Transport에서 FunapiMessage로 변경되었습니다.) 0 · Share

edit flag offensive delete link more
0

answered 2016-11-30 17:25:32 +0900

inkeun.kim gravatar image

Answer by minwoo.seok · 2016-06-21 AM 08:45

안녕하세요. Protobuf Message 의 경우도 Json 과 같이 ToString() 과 비슷한 함수를 제공하고 있습니다.

https://developers.google.com/protoco... 위 문서에서 그 내용을 참고하실 수 있는데요. 몇 가지만 가져와 보면 다음과 같은 함수들을 지원하고 있습니다.

string  DebugString() constGenerates a human readable form of this message, useful for debugging and other purposes.
string  ShortDebugString() constLike DebugString(), but with less whitespace.

그래서 echo.DebugString() 또는 echo.ShortDebugString() 함수를 호출해서 Protobuf Message 의 내용을 출력하시면 됩니다.

감사합니다.

edit flag offensive delete link more
0

answered 2016-11-30 17:26:10 +0900

inkeun.kim gravatar image

Answer by minwoo.seok · 2016-06-21 AM 09:00

서버에서는 SessionService 컴포넌트에서 제공하는 session_message_logging_level 이란 옵션을 통해서 클라이언트, 서버간에 송수신되는 메시지의 내용을 출력할 수 있습니다.

다음과 같이 해당 옵션을 추가하여 서버를 실행하시면 됩니다.

$ ./my_server-local --session_message_logging_level=2

클라이언트가 서버로 메시지를 전송하면 다음과 같이 출력됩니다. (Protobuf Message 를 ShortDebugString() 으로 출력한 모습입니다. Json 도 아래와 유사하게 출력됩니다.)

I0530 12:33:15.106679 30944 session_impl.cc:1496] [C->S] Protobuf: type=cs_quest_list, length=56, session=c2e31046-c7e3-4226-ac2a-0dd8f1a47fd1 [cs_quest_list] { }

서버가 클라이언트로 메시지를 전송하면 다음과 같이 출력됩니다.

I0530 12:33:15.107169 30964 session_impl.cc:1496] [S->C] Protobuf: type=sc_quest_list, length=86, session=c2e31046-c7e3-4226-ac2a-0dd8f1a47fd1 [sc_quest_list] { result: 0 quest { point: 0 quests { quest_id: 6 count: 0 } quests { quest_id: 10 count: 0 } quests { quest_id: 1 count: 0 } quests { quest_id: 8 count: 0 } } }

이에 관한 엔진 문서는 다음을 참고하시면 됩니다. http://www.ifunfactory.com/engine/doc...

감사합니다.

edit flag offensive delete link more
0

answered 2016-11-30 17:27:47 +0900

inkeun.kim gravatar image

Answer by Carlos · 2016-06-22 AM 05:45

안녕하세요. 아이펀팩토리 Carlos입니다.

현재 proto 2 버전 프로토버프를 지원하는 c# 라이브러리는 메세지의 내용을 텍스트로 출력하는 기능이 포함되어 있지 않습니다. 아마도 정식 지원이 아니다보니 상대적으로 지원하는 기능이 부족한게 아닐까 생각합니다.

proto 3부터는 정식으로 c#을 지원하면서 메세지 프린트 기능을 descriptor를 통해 구현할 수 있도록 해줍니다만, 아직 베타이기 때문에 적용하지 않고 있습니다.

해당 기능이 꼭 필요한 경우, c#의 reflection을 사용하여 클래스의 property와 value를 가져와서 텍스트를 생성하는 함수를 직접 만드실 수 있습니다. 주의하실 점은, 퍼포먼스가 상당히떨어질 가능성이 높고, iOS에서 문제를 일으킬 가능성이 있습니다. 해당 함수를 만드시더라도 실 기기에서 테스트하기 보다는 에디터에서 확인하는 정도로 활용하시는 것을 추천합니다.

감사합니다.

edit flag offensive delete link more
0

answered 2016-11-30 17:27:15 +0900

inkeun.kim gravatar image

Answer by steve.lee · 2016-06-21 PM 01:00

안녕하세요..

--session_message_logging_level=2

로 하니깐 로그 잘 보입니다..

그런데 unity 에서는 어떻게 해야 되나요? 25.2.5. 메시지 수신 의 예제를 보고 있습니다.

// 메시지 핸들러로 전달되는 body는 FunMessage 객체입니다. 
FunMessage msg = body as FunMessage; 
// Extend 된 메시지 타입을 GetMessage를 통해 얻어옵니다. 
object obj = FunapiMessage.GetMessage(msg, MessageType.pbuf_echo); 
// PbufEchoMessage 메시지의 msg 값을 로그로 출력합니다. 
PbufEchoMessage echo = obj as PbufEchoMessage; 
DebugUtils.Log("Received an echo message: {0}", echo.msg);

c# 에서는 echo.DebugString() 이 안 되네요. 그리고 JsonUtility.ToJson(echo); 로 하니간 그냥 빈값이 나옵니다.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2016-11-30 17:25:01 +0900

Seen: 130 times

Last updated: Nov 30 '16