데이터 전송
모든 행동에는 데이터 전송이 필요하다. 턴을 넘길 때도, 몬스터를 소환할 때, 공격을 시도했을 때, 능력이 발동될 때, 카드를 뽑았을 때 등 모든 상황에 능력이 발동된다. BackEnd 서버에서 지원해주는 함수는 Backend.Match.SendDataToInGameRoom(data)로 인자로 바이트 배열을 받는다. 모든 경우에 바이트 배열을 생성하여 전송한다. 상황 별로 제일 배열의 제일 앞의 숫자가 동작의 종류가 되고 뒤는 상황 별 src, dest가 되기도 한다. src와 dest는 entity를 화면에 생성할 때 이름을 숫자로 생성하여 그 숫자를 통해 정보를 넘긴다. 플레이어의 경우 0 이다. 나머지 entity는 생성 순서대로 이름이 생성된다.
기본 공격의 경우 code가 0이다.
byte[] send = new byte[3] { 0x00, Convert.ToByte(attacker.gameObject.name), Convert.ToByte("0") };
BackEndMatch.SendMessage(send);
데이터를 전송을 하면 받는 수신하는 쪽은 BackEndMatch에서 이벤트 핸들러를 통해 data를 받게 된다. 받은 데이터는 스위치 문으로 들어간다. 스위치 문에서 case에 맞는 상황으로 이동하여 동작한다.
public void DataProcess(byte[] array)
{
byte[] calc = new byte[array.Length-1];
Array.Copy(array,1,calc,0,calc.Length);
switch(Convert.ToInt32(array[0]))
{
case 103:
SetOtherItem(calc,Convert.ToInt32(array[0]));
break;
case 104:
SetOtherItem(calc,Convert.ToInt32(array[0]));
break;
case 105:
SetOtherItem(calc,Convert.ToInt32(array[0]));
break;
case 106:
TurnManger.Inst.EndTurn();
break;
}
}
위의 코드는 일부를 생략하여 발췌하였다. 데이터를 가공해서 표현하는 부분은 중복되는 코루틴을 만들게 되었다.
code의 양이 방대하여, 마무리에 code 전체를 올린다.