diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index e7840696..df3a5cf2 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -1,31 +1,3 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - -# This workflow helps you trigger a SonarCloud analysis of your code and populates -# GitHub Code Scanning alerts with the vulnerabilities found. -# Free for open source project. - -# 1. Login to SonarCloud.io using your GitHub account - -# 2. Import your project on SonarCloud -# * Add your GitHub organization first, then add your repository as a new project. -# * Please note that many languages are eligible for automatic analysis, -# which means that the analysis will start automatically without the need to set up GitHub Actions. -# * This behavior can be changed in Administration > Analysis Method. -# -# 3. Follow the SonarCloud in-product tutorial -# * a. Copy/paste the Project Key and the Organization Key into the args parameter below -# (You'll find this information in SonarCloud. Click on "Information" at the bottom left) -# -# * b. Generate a new token and add it to your Github repository's secrets using the name SONAR_TOKEN -# (On SonarCloud, click on your avatar on top-right > My account > Security -# or go directly to https://sonarcloud.io/account/security/) - -# Feel free to take a look at our documentation (https://docs.sonarcloud.io/getting-started/github/) -# or reach out to our community forum if you need some help (https://community.sonarsource.com/c/help/sc/9) - name: SonarCloud analysis on: @@ -36,15 +8,16 @@ on: workflow_dispatch: permissions: - pull-requests: read # allows SonarCloud to decorate PRs with analysis results + pull-requests: read jobs: sonar-check: name: Sonar Check - runs-on: windows-latest # безпечно для будь-яких .NET проектів + runs-on: windows-latest steps: - uses: actions/checkout@v4 - with: { fetch-depth: 0 } + with: + fetch-depth: 0 - uses: actions/setup-dotnet@v4 with: @@ -54,29 +27,24 @@ jobs: - name: SonarScanner Begin run: | dotnet tool install --global dotnet-sonarscanner - echo "$env:USERPROFILE\.dotnet\tools" >> $env:GITHUB_PATH dotnet sonarscanner begin ` - /k:"ppanchen_NetSdrClient" ` - /o:"ppanchen" ` - /d:sonar.token="${{ secrets.SONAR_TOKEN }}" ` - /d:sonar.cs.opencover.reportsPaths="**/coverage.xml" ` - /d:sonar.cpd.cs.minimumTokens=40 ` - /d:sonar.cpd.cs.minimumLines=5 ` - /d:sonar.exclusions=**/bin/**,**/obj/**,**/sonarcloud.yml ` - /d:sonar.qualitygate.wait=true + /k:"NatashaTymchenko_NetSdrClient" ` + /o:"natashatymchenko" ` + /d:sonar.token="${{ secrets.SONAR_TOKEN }}" ` + /d:sonar.cs.opencover.reportsPaths="**/coverage.xml" ` + /d:sonar.cpd.cs.minimumTokens=40 ` + /d:sonar.cpd.cs.minimumLines=5 ` + /d:sonar.exclusions=**/bin/**,**/obj/**,**/sonarcloud.yml ` + /d:sonar.qualitygate.wait=true shell: pwsh - # 2) BUILD & TEST + + # 2) BUILD - name: Restore run: dotnet restore NetSdrClient.sln + - name: Build run: dotnet build NetSdrClient.sln -c Release --no-restore - #- name: Tests with coverage (OpenCover) - # run: | - # dotnet test NetSdrClientAppTests/NetSdrClientAppTests.csproj -c Release --no-build ` - # /p:CollectCoverage=true ` - # /p:CoverletOutput=TestResults/coverage.xml ` - # /p:CoverletOutputFormat=opencover - # shell: pwsh + # 3) END: SonarScanner - name: SonarScanner End run: dotnet sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}" diff --git a/NetSdrClientApp/NetSdrClient.cs b/NetSdrClientApp/NetSdrClient.cs index b0a7c058..ed7214e4 100644 --- a/NetSdrClientApp/NetSdrClient.cs +++ b/NetSdrClientApp/NetSdrClient.cs @@ -53,7 +53,7 @@ public async Task ConnectAsync() } } - public void Disconect() + public void Disconnect() { _tcpClient.Disconnect(); } diff --git a/NetSdrClientApp/Networking/TcpClientWrapper.cs b/NetSdrClientApp/Networking/TcpClientWrapper.cs index 1f37e2e5..963d304d 100644 --- a/NetSdrClientApp/Networking/TcpClientWrapper.cs +++ b/NetSdrClientApp/Networking/TcpClientWrapper.cs @@ -12,8 +12,6 @@ namespace NetSdrClientApp.Networking { public class TcpClientWrapper : ITcpClient { - private string _host; - private int _port; private TcpClient? _tcpClient; private NetworkStream? _stream; private CancellationTokenSource _cts; @@ -24,8 +22,6 @@ public class TcpClientWrapper : ITcpClient public TcpClientWrapper(string host, int port) { - _host = host; - _port = port; } public void Connect() diff --git a/NetSdrClientApp/Networking/UdpClientWrapper.cs b/NetSdrClientApp/Networking/UdpClientWrapper.cs index 31e0b798..12655409 100644 --- a/NetSdrClientApp/Networking/UdpClientWrapper.cs +++ b/NetSdrClientApp/Networking/UdpClientWrapper.cs @@ -35,7 +35,7 @@ public async Task StartListeningAsync() Console.WriteLine($"Received from {result.RemoteEndPoint}"); } } - catch (OperationCanceledException ex) + catch (OperationCanceledException) { //empty } @@ -61,16 +61,7 @@ public void StopListening() public void Exit() { - try - { - _cts?.Cancel(); - _udpClient?.Close(); - Console.WriteLine("Stopped listening for UDP messages."); - } - catch (Exception ex) - { - Console.WriteLine($"Error while stopping: {ex.Message}"); - } + StopListening(); } public override int GetHashCode() @@ -82,4 +73,4 @@ public override int GetHashCode() return BitConverter.ToInt32(hash, 0); } -} \ No newline at end of file +} diff --git a/NetSdrClientApp/Program.cs b/NetSdrClientApp/Program.cs index fda2e697..38b421cd 100644 --- a/NetSdrClientApp/Program.cs +++ b/NetSdrClientApp/Program.cs @@ -1,46 +1,57 @@ -using NetSdrClientApp; +using System; +using System.Threading.Tasks; +using NetSdrClientApp; using NetSdrClientApp.Networking; -Console.WriteLine(@"Usage: -C - connect -D - disconnet -F - set frequency -S - Start/Stop IQ listener -Q - quit"); - -var tcpClient = new TcpClientWrapper("127.0.0.1", 5000); -var udpClient = new UdpClientWrapper(60000); - -var netSdr = new NetSdrClient(tcpClient, udpClient); - -while (true) +namespace NetSdrClientApp { - var key = Console.ReadKey(intercept: true).Key; - if (key == ConsoleKey.C) - { - await netSdr.ConnectAsync(); - } - else if (key == ConsoleKey.D) - { - netSdr.Disconect(); - } - else if (key == ConsoleKey.F) + public static class Program { - await netSdr.ChangeFrequencyAsync(20000000, 1); - } - else if (key == ConsoleKey.S) - { - if (netSdr.IQStarted) + public static async Task Main() { - await netSdr.StopIQAsync(); - } - else + Console.WriteLine(@"Usage: + C - connect + D - disconnet + F - set frequency + S - Start/Stop IQ listener + Q - quit"); + + var tcpClient = new TcpClientWrapper("127.0.0.1", 5000); + var udpClient = new UdpClientWrapper(60000); + + var netSdr = new NetSdrClient(tcpClient, udpClient); + + while (true) { - await netSdr.StartIQAsync(); + var key = Console.ReadKey(intercept: true).Key; + if (key == ConsoleKey.C) + { + await netSdr.ConnectAsync(); + } + else if (key == ConsoleKey.D) + { + netSdr.Disconnect(); + } + else if (key == ConsoleKey.F) + { + await netSdr.ChangeFrequencyAsync(20000000, 1); + } + else if (key == ConsoleKey.S) + { + if (netSdr.IQStarted) + { + await netSdr.StopIQAsync(); + } + else + { + await netSdr.StartIQAsync(); + } + } + else if (key == ConsoleKey.Q) + { + break; + } + } } } - else if (key == ConsoleKey.Q) - { - break; - } } diff --git a/README.md b/README.md index b3a90294..4f361899 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=NatashaTymchenko_NetSdrClient&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=NatashaTymchenko_NetSdrClient) # Лабораторні з реінжинірингу (8×) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=ppanchen_NetSdrClient&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=ppanchen_NetSdrClient) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=ppanchen_NetSdrClient&metric=coverage)](https://sonarcloud.io/summary/new_code?id=ppanchen_NetSdrClient)