데이터 전송

모든 행동에는 데이터 전송이 필요하다. 턴을 넘길 때도, 몬스터를 소환할 때, 공격을 시도했을 때, 능력이 발동될 때, 카드를 뽑았을 때 등 모든 상황에 능력이 발동된다. 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 전체를 올린다.