Packet Generator #2

CJB_ny·2022년 2월 27일
0

Unity_Server

목록 보기
40/55
post-thumbnail

1. 인터페이스 맞춰주기

결국 우리가 하고싶은게 뭐냐하면은

XML파일 읽은다음에

여기서 하나하나씩 다 파싱을 한다음에

이 기능을 이용해가지고

여기다가 "파일"로 하나로 만들어 주는 것이다.

이런 이름으로 만들어주고 "" 에다가 자동 완성한 무언가를 넣어주면된다.

" "안에다가 자동완성하는 것을 "genPackets" 라는 이름으로

위에다가 실시간으로 만들어서

계속 밀어 넣어 주면 될 것이다.

실시간으로 계속 만들어지는 packet을 받아서 밀어 넣자.

그래서 while안에서 파싱을 하는 동안에 genPackets에다가 내용을 덕지덕지 추가를 하면된다는 것이다.

ParseMembers가 끝나면 이어서 만들어 줘야하는데

Format()안에서 format을 입력을 한다음에

그다음 하나하나씩 입력을 하는 부분이 있는데

우리가 패킷 같은 경우에는

PacketFormat.packetFormat으로 관리를 하고있었다.

이까지 해주고 끝이 아니라 값을 4개를 넣어줘야 하는데

이 4개의 의미가

이 4개를 의미를 한다.

이 4개를 만들어서 넣어 줘야한다는 것이다.

{0} 패킷 이름 같은 경우는

그냥 위에 있는거 넣어주면 되는데 나머지 부분은 어떻게 넣을지 잘 모르겠다.

ParseMember를 완성하고 {1}, {2}, {3}을 반환을 해줘야 하는데

그 완성한것을 return 값으로 받아서

위에서 정의한 1, 2, 3번을 ParseMember가 완성해서 뱉어주는 걸로 수정을 하자.

이렇게 수정하고 return 값도 수정 ㄱㄱ

그래서 최종적으로 패킷에 대한 정보를 만들어 준다음에

Item1, 2, 3를 Format에다가 넣어줘서 genPackets라는 전체 string에다가

안에다가 계속 추가를 해주면 될 것이다.

그래서 1, 2, 3번 반환 하는 것을 mC, rC, wC로 맞춰주어서 뭘 반환하는 지

내부에서 맞춰 주다가

최종적으로 while문에서 벗어나가지고 끝났다 싶으면은

밖에서 return을 해주면 될 것이다.

그래서 이렇게 들어가게 될 것이다.

그래서 이까지 인터 페이스를 맞추는 작업은 끝났다.


2. PDL의 타입에 따라 switch문 채우기

그래서

bool, byte, 이런거에 따라서 반환하는 mC, rC, wC를 채워 주면 될 것이다.

위에 if문에서 PDL의 내용을 한줄 한줄씩 read하고있었는데

밑에서 다시 mC가 있다면 엔터를 쳐주자.

그래야지만

playerId를 파싱을 해서 엔터키를 눌러야지만, (이미 내용이 있다고 하면 == false)

ServerSession에서 했던것처럼

이렇게 한줄

그다음

이렇게 한줄로 되어서 파일이 만들어 질 것이다.

안하면

막 이런식으로 덕지덕지 붙어 있을 것이다.

이렇게 셋다 추가.

bool ~ double 까지는 우리가 정의한

이녀석으로 정의 하면된다.

string과 list는 다르기 때문에 다른 format으로 해줘야하고.

그래서

0번이 변수 형식인데 이게 memberType으로 뽑아오고 있었다.

이렇게 굳

readFormat도 채워주면되는데 이녀석의 경우

0번 1번 2번

이런식이라

이렇게 인데 To 변수 형식은 밑에서 정의해서 만들어서 넣어 주도록 하자.


To 변수이름 형식 정의


switch문으로 구분을 해서 ToUInt16 인지 32인지 64인지 이런식으로 구분을 해주도록 하자.

그런데 여기서 byte의 경우는

바이트 배열에서 바이트로 변환하는 것을 따로 정의할 필요가 당연히 없으니까

case byte는 뺴자.

그리고 이렇게 맞춰 주자.


그러면 이것을 아까 위에서

이렇게 넣어주도록 하자.

그다음

writeCode를 만들어 주면되는데

이렇게 때문에

이렇게 해주면된다.


이렇게 까지하면 우리가 list는 안 만들어 주었고 'string'까지는 만들어 주었으니까

bool ~ double까지 했던 작업과 비슷하게 해주면 될? 듯하다?

그래서 이렇게 복사를 하고 하나씩 바꿔보도록 하자.

string도 memberFormat 까지는 똑같다.

이런식으로 조금씩 다른데

이거 보고 수정할 부분 수정 해주면된다.

그래서

이렇게 수정 + 넣어주면 될 것이다.


그래서 우리가 하고있는게

Parsemember에서

while문 안에서 한줄 한줄씩 Read()한다음에

이렇게 한줄 한줄 파싱을 하면서

긁어온다음에

mC, rC, wC에다가 신나게 덫붙인다음에

완성이 되면 이 녀석을

이렇게 전달을 해주고 있는 작업을 하고 있었다.

전달해준 것을 t로 받아서 gemPackets에다가 밀어넣어주고 있었던거임 ㅇㅇ.

그래서 이것을

이라는 이름으로 만들어 주고 있었다.

3. 만든 파일 보기 && 수정

이것을 실행 ㄱㄱ

실행 > 파일탐색기에서 폴더 열기 >

bin > Debug > net6.0 가보면 이런식으로 폴더 만들어져있다.

그래서 이거 파일 까보면

이런식으로 되어있는데

조금 더럽기도하고 빠져있는 부분들도 있다.

먼저 4~5번째줄 세미콜론 빠져있는데

이렇게 포맷을 수정 ㄱㄱ

다시 실행해보면

다시 정상적으로 붙어서 나온다.

그래서

이런식으로 정상적으로 출력은되고 있기는한데

정렬이 이쁘게 안되고 있다.

그래서 정렬을 강제로 맞춰 주기 위해서

이 부분에서

여서 끝내기 전에 강제로 탭을 맞춰 주도록 하겠다.

엔터를 치는 부분은 엔터 + 탭으로 강제로 맞춰 주고

그래서 이렇게 강제로 셋팅 해주면

이랫던 부분이

이렇게 이쁘게 잘됨.

그래서 Read, Write의 일반 적인 경우까지는 완성 했다.


4. List Format 만들기

리스트는 애초애 memberFormat부터 다르다.

ServerSession으로 가보면

쓸 때는

이런식으로 먼저 struct를 만들고 그다음에

이어서

이렇게 List를 만들어 줘야

똑같이 출력이 될 것이다.

그래서 이렇게 만들어주고 안에 채워주면 됨.

이렇게 맞춰 줄 것이고

그리고 다시

이렇게 수정 ㄱㄱ.

그리이런식으로 3번, 4번 넣어주자.

그래서 이까지 했던게

리스트 포맷이고,

그다음에

리스트를 Read하는 포맷은

이렇게 맞춰 주도록 하자.

그럼

이부분이 완성이 된것이고

그다음 리스트를 Write하는 부분은

이부분인데

이부분도 뭐 똑같이 해주면된다.


그래서 긴긴 작업이 끝나고

이제 Program으로 가서

이부분을 채워주기 시작해야한다.

이녀석도

이렇게 파싱리스트 함수를 만들고

똑같이 Tuple뱉어주는ㄴ

라는 함수를 만들어주자.

그리고

이렇게 해주고 이까지 해주고

listformat을 보면은

이런식인데

2, 3, 4같은 경우는 똑같다.

이부분은 Parsemember를 이용해서 재사용하면 될 거같다라는 생각이 든다.

그러면 이렇게 뱉어주는 부분 t로 받아서

t를 이용해서 최종적인 list의 형식을 맞춰 주면 될 것이다.

memberListFormat을 만들어주는데

이렇게 5개를 받아주고 있었다.

대문자랑 소문자를 구별을 해주는 부분이 있어야 하는데

이부분을 아래에다가 구현을 해주도록 하겠다.


대소문자 구별 구현

잠시 ToString 사용법은

이렇다.

그래서 함수를 이렇게 만들어주고

위에서 다시 이런식으로 넣어주면 될 것이다.

그러면 이 멤버 코드는 완성이 될 것이다.

그리고 readCode를 만들어주는데

이녀석도 살펴보면은

이렇게 들어 갔었다.

writeCode도 똑같이 해주면 이렇게 완성이 될 것이다.

그리고 return을 해주면 될 것이다 이제.

굿.

그리고 case list로 올려서

이렇게 추가를 해주면 될 것이다.


그리고 실행을 해보면은

리스트 부분이 잘 만들어 져있다.

그러면 이제 이게 진짜 리얼로 잘되는지 보기 위해서 GenPackets내용 싹다 복사를 한다음에

클라세션, 서버 세션에 갱신? 붙여넣자

그리고 다시 이렇게 설정하고 실행을 해보면

그러면

이런부분 에러가 나는데

SkillInfo가 Skill이라는 이름으로 바뀌었으니까 바꿔주고

클라 세션의 이부분도

이렇게 둘다 바꿔주고 실행하면

이렇게 정상적으로 다 잘 실행이 된다!

profile
공부 일기장으로 변해버린 블로그 (https://cjbworld.tistory.com/ <- 이사중)

0개의 댓글