
프로그래머스 문제로 행렬의 곱셈문제를 풀었다.

행렬의 곱셈은 왼쪽 행렬의 열과 오른쪽 행렬의 행이 같아야지 곱셈이 가능하고 결과로는 MxP의 행렬이 나오게 된다. 배열 m행 p열로 선언해두고
m번 반복해서 값을 저장하고 반환하면 된다.
vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2)
{
int m = arr1.size(); // A의 행 수
int n = arr1[0].size(); // A의 열 수, B의 행 수
int p = arr2[0].size(); // B의 열 수
// 곱한 결과의 크기는 m * p가 된다.
vector<vector<int>> answer(m, vector<int>(p,0));
for(int i = 0; i < m; i++)
{
for(int j = 0; j < p; j++)
{
for(int k = 0; k < n; k++)
{
answer[i][j] += arr1[i][k] * arr2[k][j];
}
}
}
return answer;
}

불변수를 두고 RepNotrify와 Multicast로 설정을 해두고 실험을 해 보았다.

결과를 확인하는건 Controller와 Key 1, 2를 눌렀을때 동작하게 했으므로 이벤트가 발생되면 값을 ChangeValue로 값을 변경하고 RepNotify를 통해 PrintText를 통해 출력을 해보는 것이다.
결과는 재밌게도 Multicast와 RepNotify와 비슷한 결과가 나왔다.
값이 변경되면 변경된 값이 Server로 가고 Server에서 변경된 값을 클라이언트에 복제하기 때문에 비슷한 결과가 나왔다고 생각한다.

Replicated로 변경했을 경우도 테스트를 해보았는데 RepNotify와 동작이 달랐다.
RepNotify는 Client값 또한 Server와 동기화 되는 과정이 있었는데 Replicated는 Client값이 Server와 동기화 되지는 않았다.
다음으로 플레이어 고유 ID를 부여하는 로직을 작성해보자.
GameMode에 변수를 두고 PlayerState의 변수를 업데이트하는 로직을 짜보기

GameMode에 있는 PlayerCount를 가져오기 위한 방법으로 2가지를 생각해 보았는데
첫번째방법은 PlayerState가 생성될 때 RunOnServer를 실행시켜서 가져오는 것이다.
두번째 방법은 GameMode에 PostLoginEvent를 이용해 Client가 접속 될 경우 값을 설정하는 것이다.



두 방법 다 값을 가져오기는 하는데 PC0번에 0번 State에 해당 클라이언트가 들어있지 않는 문제가 발생하였다.
Log출력결과
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 1: Host
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 1: Guest_445
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Client 1: Host
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Client 1: Guest_446
LogNet: AddClientConnection: Added client connection: [UNetConnection] RemoteAddr: 127.0.0.1:52819, Name: IpConnection_255, Driver: Name:GameNetDriver Def:GameNetDriver IpNetDriver_189, IsServer: YES, PC: NULL, Owner: NULL, UniqueId: INVALID
LogNet: Client netspeed is 100000
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 1: Host
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 1: Guest_447
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 2: Host
LogBlueprintUserMessages: [BP_TestPlayerState_C_0] Client 2: Guest_447
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Client 2: Host
LogBlueprintUserMessages: [BP_TestPlayerState_C_1] Client 2: Guest_446
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 2: Host
LogBlueprintUserMessages: [BP_TestPlayerState_C_2] Client 2: Guest_445
중간에 연결이 끊기는 경우도 있었는데

매핑을 출력해보니 연결이 끊기는 경우도 발생했다.
테스트를 해보니 연결이 원래 불안정하기 때문에 연결될때 Delay를 안걸어주거나 하면 발생하는 문제라는것을 알았다.
네트워크 화가치민다.