유니티에서는 백그라운드에서 유니티 게임오브젝트 접근하거나 하면 크래시가 나는 경우가 있다. 그래서 메인쓰레드에서만 접근하도록 한다.
ServerCore dll을 곧바로 유니티로 이식하면 디버깅하는데 어려움이 있다. 처음에는 코드를 수동으로 옮기도록 했다.
유니티에서 Span, TryWriteBytes, slice와 같은 것들은 사용할 수 없어서 코드를 이전에 사용했던 것으로 약간 수정했다. PacketFormat을 수정하고 PacketGenerator 빌드를 한 후 배치파일을 다음과 같이 수정했다. 그러면 이제 유니티 프로젝트 내에 패킷을 정해준 포맷대로 만들 수 있다.
필요한 코드를 옮긴 후 NetworkManager.cs를 만들고 나서 DummyClient에서 처럼 Connector를 만들고 서버와 연결하는 모습을 볼 수 있다.
Session.cs에서 OnRecvCompleted가 호출되면
PacketSession::OnRecv() ->
ServerSession::OnRecvPacket() ->
PacketManager::OnRecvPacket() ->
PacketManager::MakePacket() ->
PacketHandler::S_ChatHandler()
에서 Debug.Log로 서버에서 전송받은 (DummyClient가 뿌려준) 메시지 중에 playerId가 1번이 뿌린 메시지만 출력해 주고있다.