/// <summary> /// 그림을 그리기 위한 데이터를 수신한다. /// 추가적으로 Drawing Room에 존재할 때 처리해야 하는 모든 동작을 포함한다. /// </summary> public void ReceiveDrawingData() { var msg = _networkManager.Receive(); if (msg == null) { return; } msg = msg.TrimEnd('\0'); var tokens = msg.Split(AppData.Delimiter); foreach (var token in tokens) { if (token == "") { continue; } if (token.Contains(char.ToString(AppData.ServerCommand))) { if (token == CommendBook.ROOM_CLOSED) { _warningOverlayManager.ShowOverlay("RoomServer-Closed"); _drawingCover.StopDrawing(); _networkManager.ReconnectToNameServer(); } } else if (token.Contains(char.ToString(AppData.ClientCommand))) { if (token == CommendBook.END_OF_LINE) { _drawable.RemoteRelease(); continue; } else if (token == CommendBook.COLOR_COMMEND + "RED") { _drawingSettings.SetMarkerRed(); continue; } else if (token == CommendBook.COLOR_COMMEND + "BLUE") { _drawingSettings.SetMarkerBlue(); continue; } else if (token == CommendBook.COLOR_COMMEND + "GREEN") { _drawingSettings.SetMarkerGreen(); continue; } else if (token == CommendBook.COLOR_COMMEND + "BLACK") { _drawingSettings.SetMarkerBlack(); continue; } else if (token == CommendBook.COLOR_COMMEND + "ERASE") { _drawingSettings.SetEraser(); continue; } else if (token == CommendBook.CLEAR_BACKGROUND_COMMEND) { _drawable.ResetCanvas(); continue; } } else { var pos = token.Split(','); //var vec = new Vector2(float.Parse(pos[0]) * resolutionX, float.Parse(pos[1]) * resolutionY); //FIXME : 상하 240, 좌우 5 정도의 크기차 발생 -> 1920-240*2 이후 240만큼을 보상함 //현재는 아주 정확하게 맞지만 하드코딩상태. 여유가 있으면 바꾸자. var vec = new Vector2(float.Parse(pos[0]), float.Parse(pos[1]) - 240); _drawable.ReceiveCoordinateData(vec); _drawable.RemoteDrag(); } } }