'network'에 해당되는 글 2건

  1. 2014.09.18 unity Network 알아보는중...
  2. 2014.04.11 cocos2d 에서 curl 쓰기 (webserver) 연동
728x90

 

 

Network.Instantiate은 처음엔 네트워크 상에서 그냥 생성하는건가 보다 하고 생각했는데 아닌거 같다.

번역이 뭔가 어설프긴한데 모든 클라이언트에 instanted 한다는거 봐선 내부적으로 뭔가 RPC처럼 비슷하게 돌아가서 모든 클라이언트에게 그 오브젝트를 만들어라고 명령을 내리는 듯한 그런 구조로 돌아가는거 같다.

 

networkView를 이용해서 transform(Vector3)은 position, rotation, scale 이렇게 3개만 sync가 가능하다고 한다.

transform.parent 와 같은 hierarchy에 대한 것은 sync가 안된다고 한다.

 


Network.Instantiate를 통해 생성된 네트워크 개체는

그 개체를 생성한 클라이언트 쪽에서만 제어가 되고.. 제어된 개체는 연결된 다른 클라이언트에서
transform, animation 등이 싱크된다.
하지만 그 개체를 생성하지 않은 다른 클라이언트에서 컨트롤 하는것은 다른 클라이언트에 반영되지 않는다.

 


Network.Instantiate 는 buffered 되어.. 나중에 접속한 유저에게도 똑같이 buffered에 쌓인 순서대로  객체를 생성한다.

 

그렇지만. Network.Destroy는 buffered 되지 않기 때문에 Destroy되는 그순간 접속해 있지 않은 클라이언트들은Destroy가 되지 않는다.


그래서 해결책으로는


Network.Instantiate 할때 그룹ID를 특정 int 값으로 부여해주고.

Network.Destroy시 그룹ID로 다시 한번 Network.RemoveRPCsInGroup(그룹ID); 로 처리해주어야 한다.

 


 

networkView.RPC 메서드를 쓸때 두번째 파람인..RPCMode를 쓸때 주의하자!!


A,B 두개의 클라이언트만 접속해있을때.. 두 클라이언트에서.. 어떤 gameObject를 지우거나..

비활성화(SetActiveRecursively(false)) 하면..

그 후 접속한.. C,D 클라이언트에서도 반영이 되게 해야 하는데..

이때.. 모든 RPC 명령들이 RPC buffer에 저장이 되어 있어야만..

제대로 반영이 된다..


이때 반드시 RPCMode를 RPCMode.AllBufferd로 설정해야 한다!!

728x90
Posted by 정망스
,
728x90

 

 

 

우선 현재만든 cocos 프로젝트에 libNetwork를 추가 시켜주어야 합니다.

 

 

경로 : 자기가만든 cocos프로젝트->cocos2d->cocos->network 입니다.

 

 

그리고 프로젝트의 빌드종속성->프로젝트 종속성으로 들어갑니다.

 

 

libNetwork에 체크를 해주고 확인을 합니다.

 

 

프로젝트의 속성으로 들어가서 링커->입력 부분에서

저 3가지 lib를 추가 해준다.

 

 

그리고 C/C++ 부분에서 일반 부분에서

추가 포함 디렉토리에서 경로를 추가 해주어야 한다.

 

..\Classes;

$(EngineRoot);

$(EngineRoot)cocos;

$(EngineRoot)cocos\editor-support;

$(EngineRoot)cocos\audio\include;

$(EngineRoot)cocos\network;

$(EngineRoot)external;

$(EngineRoot)external\chipmunk\include\chipmunk;

$(EngineRoot)external\curl\include\win32;

$(EngineRoot)external\websockets\win32\include;

$(EngineRoot)extensions;

..

 

일단 내 프로젝트 디렉토리에는 이정도로 추가되어있다 아직 나도 정확히 어떤부분을 추가해야되는건지는 잘몰라서일단 다 적어올려놓는다.

 

오른쪽 클릭 복사가 막혀있기 때문에 임의로 메모장에 적어서 파일을 올려 놓을테니 필요하신분들은 거기 있는것들 그냥 복사해서 추가 하면 될듯합니다.

 

lib.txt

 

다하셨으면 확인 하시면 이제 전반적인 설정은 끝

 

<HelloWorldScene.h>

 

간단하게 기본적으로 cocos 프로젝트를 생성하면 생기는 HelloWorldScene 에서 한번 해보는 코드입니다.

 

위에 보이는 3가지 헤더파일 include 하시고

웹 서버로 요청을 한 후 다시 응답을 받아 처리할 함수를 하나 만듭니다.

 

<HelloWorldScene.cpp>

 

HttpRequest의 객체를 만든다음 해당 url로 요청을 보내는 코드 부분입니다.

 

setUrl 안의 주소는 웹서버의 역할을 하고 있는 이름은 main이고 서블릿으로 만든 자바파일입니다.

 

(넘겨온 name의 파라미터 값을 따로 저장해서 json으로 만들어서 뿌려주는 간단한 코드입니다.)

 

 

 

postData 변수를 보면 해당 url에 파라미터로 name을 넘겨주고 있고 그 name 파라미터의 값은 test 입니다.

 

그리고 cocos에서 요청을 보낼때 POST 형식으로 보내고 있기 때문에 서블릿에서도 doPost, doGet 이있는데

doPost 부분에서 처리해야 합니다.

 

 

기본적으로 응답이 재대로 오지않았으면 바로 return을 시키고 있습니다.

 

뭐 그외의 예외상황도 여러가지 처리하고 있구요.. 자세히 코드를 설명하진 않겠습니다..

 

vector를 만들어서 응답으로 받아온 데이터를 넣고 있습니다.

 

그리고 strData에 추가시킨후 cocos 화면 자체에선 확인할수 없고

디버깅 모드로 돌려서 출력창에서 한번 확인해 보면...

 

뭐 출력창엔 재대로 response가 되었으면 complete 라는 문구와 함께

response의 responseCode 번호가 찍히게 되게 되있고

 

제일 중요시 볼건 srtData 변수에 웹서버에서 보내온 데이터가 재대로 받아졌는지 입니다.

JSON으로 만든형식을 웹서버에서 받아오고 있고 디버깅 화면에서 저렇게 잘 받아오는게 보이네요~

 

끝!

 

 

728x90
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침