first push
This commit is contained in:
commit
e33164b5c2
BIN
.vs/ProjectEvaluation/sharpfrn.metadata.v9.bin
Normal file
BIN
.vs/ProjectEvaluation/sharpfrn.metadata.v9.bin
Normal file
Binary file not shown.
BIN
.vs/ProjectEvaluation/sharpfrn.projects.v9.bin
Normal file
BIN
.vs/ProjectEvaluation/sharpfrn.projects.v9.bin
Normal file
Binary file not shown.
BIN
.vs/ProjectEvaluation/sharpfrn.strings.v9.bin
Normal file
BIN
.vs/ProjectEvaluation/sharpfrn.strings.v9.bin
Normal file
Binary file not shown.
BIN
.vs/sharpFRN/CopilotIndices/0.2.1653.9816/CodeChunks.db
Normal file
BIN
.vs/sharpFRN/CopilotIndices/0.2.1653.9816/CodeChunks.db
Normal file
Binary file not shown.
BIN
.vs/sharpFRN/CopilotIndices/0.2.1653.9816/SemanticSymbols.db
Normal file
BIN
.vs/sharpFRN/CopilotIndices/0.2.1653.9816/SemanticSymbols.db
Normal file
Binary file not shown.
BIN
.vs/sharpFRN/DesignTimeBuild/.dtbcache.v2
Normal file
BIN
.vs/sharpFRN/DesignTimeBuild/.dtbcache.v2
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.vs/sharpFRN/v17/.futdcache.v2
Normal file
BIN
.vs/sharpFRN/v17/.futdcache.v2
Normal file
Binary file not shown.
BIN
.vs/sharpFRN/v17/.suo
Normal file
BIN
.vs/sharpFRN/v17/.suo
Normal file
Binary file not shown.
173
.vs/sharpFRN/v17/DocumentLayout.backup.json
Normal file
173
.vs/sharpFRN/v17/DocumentLayout.backup.json
Normal file
|
@ -0,0 +1,173 @@
|
|||
{
|
||||
"Version": 1,
|
||||
"WorkspaceRootPath": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\",
|
||||
"Documents": [
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|c:\\users\\andrea santaniello\\source\\repos\\sharpfrn\\frnwebsocket\\wsaudiostream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|solutionrelative:frnwebsocket\\wsaudiostream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|c:\\users\\andrea santaniello\\source\\repos\\sharpfrn\\frnwebsocket\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|solutionrelative:frnwebsocket\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|c:\\users\\andrea santaniello\\source\\repos\\sharpfrn\\frnwebsocket\\settingsloader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|solutionrelative:frnwebsocket\\settingsloader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|c:\\users\\andrea santaniello\\source\\repos\\sharpfrn\\sharpfrn\\frnclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|solutionrelative:sharpfrn\\frnclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|c:\\users\\andrea santaniello\\source\\repos\\sharpfrn\\frnwebsocket\\frnwebsocket.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
|
||||
"RelativeMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|solutionrelative:frnwebsocket\\frnwebsocket.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Andrea Santaniello\\Desktop\\FRN\\web\u002B\\config\\config.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|c:\\users\\andrea santaniello\\source\\repos\\sharpfrn\\sharpfrn\\sharpfrn.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|",
|
||||
"RelativeMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|solutionrelative:sharpfrn\\sharpfrn.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|c:\\users\\andrea santaniello\\source\\repos\\sharpfrn\\sharpfrn\\sharpfrn.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
|
||||
"RelativeMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|solutionrelative:sharpfrn\\sharpfrn.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpfrn\\properties\\settings.settings||{6D2695F9-5365-4A78-89ED-F205C045BFE6}",
|
||||
"RelativeMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|solutionrelative:sharpfrn\\properties\\settings.settings||{6D2695F9-5365-4A78-89ED-F205C045BFE6}"
|
||||
}
|
||||
],
|
||||
"DocumentGroupContainers": [
|
||||
{
|
||||
"Orientation": 0,
|
||||
"VerticalTabListWidth": 256,
|
||||
"DocumentGroups": [
|
||||
{
|
||||
"DockedWidth": 200,
|
||||
"SelectedChildIndex": 3,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
"Name": "ST:0:0:{e5c86464-96be-4d7c-9a8b-abcb3bbf5f92}"
|
||||
},
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
"Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 5,
|
||||
"Title": "config.json",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\Desktop\\FRN\\web\u002B\\config\\config.json",
|
||||
"RelativeDocumentMoniker": "..\\..\\..\\Desktop\\FRN\\web\u002B\\config\\config.json",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\Desktop\\FRN\\web\u002B\\config\\config.json",
|
||||
"RelativeToolTip": "..\\..\\..\\Desktop\\FRN\\web\u002B\\config\\config.json",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
|
||||
"WhenOpened": "2024-11-02T14:57:47.741Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"Title": "WSAudioStream.cs",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\WSAudioStream.cs",
|
||||
"RelativeDocumentMoniker": "FRNWebSocket\\WSAudioStream.cs",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\WSAudioStream.cs*",
|
||||
"RelativeToolTip": "FRNWebSocket\\WSAudioStream.cs*",
|
||||
"ViewState": "AgIAACkAAAAAAAAAAAAUwDwAAAAWAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-11-01T23:17:14.816Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"Title": "SettingsLoader.cs",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\SettingsLoader.cs",
|
||||
"RelativeDocumentMoniker": "FRNWebSocket\\SettingsLoader.cs",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\SettingsLoader.cs",
|
||||
"RelativeToolTip": "FRNWebSocket\\SettingsLoader.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-11-01T23:16:28.575Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 4,
|
||||
"Title": "FRNWebSocket.csproj",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\FRNWebSocket.csproj",
|
||||
"RelativeDocumentMoniker": "FRNWebSocket\\FRNWebSocket.csproj",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\FRNWebSocket.csproj",
|
||||
"RelativeToolTip": "FRNWebSocket\\FRNWebSocket.csproj",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
|
||||
"WhenOpened": "2024-11-01T23:15:42.799Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 7,
|
||||
"Title": "sharpFRN.csproj",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\sharpFRN.csproj",
|
||||
"RelativeDocumentMoniker": "sharpFRN\\sharpFRN.csproj",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\sharpFRN.csproj",
|
||||
"RelativeToolTip": "sharpFRN\\sharpFRN.csproj",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAAfAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
|
||||
"WhenOpened": "2024-11-01T23:15:25.225Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"Title": "Program.cs",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\Program.cs",
|
||||
"RelativeDocumentMoniker": "FRNWebSocket\\Program.cs",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\Program.cs",
|
||||
"RelativeToolTip": "FRNWebSocket\\Program.cs",
|
||||
"ViewState": "AgIAAB8AAAAAAAAAAAAQwDUAAAAlAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-11-01T23:13:24.793Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 6,
|
||||
"Title": "sharpFRN",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\sharpFRN.csproj",
|
||||
"RelativeDocumentMoniker": "sharpFRN\\sharpFRN.csproj",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\sharpFRN.csproj",
|
||||
"RelativeToolTip": "sharpFRN\\sharpFRN.csproj",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
|
||||
"WhenOpened": "2024-10-30T23:37:29.101Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 3,
|
||||
"Title": "FRNClient.cs",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\FRNClient.cs",
|
||||
"RelativeDocumentMoniker": "sharpFRN\\FRNClient.cs",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\FRNClient.cs",
|
||||
"RelativeToolTip": "sharpFRN\\FRNClient.cs",
|
||||
"ViewState": "AgIAADUBAAAAAAAAAAAIwGkBAAANAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-10-30T23:30:07.344Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 8,
|
||||
"Title": "Settings.settings",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\Properties\\Settings.settings",
|
||||
"RelativeDocumentMoniker": "sharpFRN\\Properties\\Settings.settings",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\Properties\\Settings.settings",
|
||||
"RelativeToolTip": "sharpFRN\\Properties\\Settings.settings",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.002767|",
|
||||
"WhenOpened": "2024-10-30T23:37:43.824Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
190
.vs/sharpFRN/v17/DocumentLayout.json
Normal file
190
.vs/sharpFRN/v17/DocumentLayout.json
Normal file
|
@ -0,0 +1,190 @@
|
|||
{
|
||||
"Version": 1,
|
||||
"WorkspaceRootPath": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\",
|
||||
"Documents": [
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\bin\\Debug\\net8.0\\settings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
|
||||
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:FRNWebSocket\\bin\\Debug\\net8.0\\settings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|c:\\users\\andrea santaniello\\source\\repos\\sharpfrn\\frnwebsocket\\wsaudiostream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|solutionrelative:frnwebsocket\\wsaudiostream.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|c:\\users\\andrea santaniello\\source\\repos\\sharpfrn\\frnwebsocket\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|solutionrelative:frnwebsocket\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|c:\\users\\andrea santaniello\\source\\repos\\sharpfrn\\frnwebsocket\\settingsloader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|solutionrelative:frnwebsocket\\settingsloader.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|c:\\users\\andrea santaniello\\source\\repos\\sharpfrn\\sharpfrn\\frnclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|solutionrelative:sharpfrn\\frnclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|c:\\users\\andrea santaniello\\source\\repos\\sharpfrn\\frnwebsocket\\frnwebsocket.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
|
||||
"RelativeMoniker": "D:0:0:{6E758F82-FE03-4F20-8428-3479B871E126}|FRNWebSocket\\FRNWebSocket.csproj|solutionrelative:frnwebsocket\\frnwebsocket.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\Users\\Andrea Santaniello\\Desktop\\FRN\\web\u002B\\config\\config.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|c:\\users\\andrea santaniello\\source\\repos\\sharpfrn\\sharpfrn\\sharpfrn.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|",
|
||||
"RelativeMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|solutionrelative:sharpfrn\\sharpfrn.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|c:\\users\\andrea santaniello\\source\\repos\\sharpfrn\\sharpfrn\\sharpfrn.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|",
|
||||
"RelativeMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|solutionrelative:sharpfrn\\sharpfrn.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpfrn\\properties\\settings.settings||{6D2695F9-5365-4A78-89ED-F205C045BFE6}",
|
||||
"RelativeMoniker": "D:0:0:{14CC80EB-8543-4998-8923-1315110CDE6F}|sharpFRN\\sharpFRN.csproj|solutionrelative:sharpfrn\\properties\\settings.settings||{6D2695F9-5365-4A78-89ED-F205C045BFE6}"
|
||||
}
|
||||
],
|
||||
"DocumentGroupContainers": [
|
||||
{
|
||||
"Orientation": 0,
|
||||
"VerticalTabListWidth": 256,
|
||||
"DocumentGroups": [
|
||||
{
|
||||
"DockedWidth": 200,
|
||||
"SelectedChildIndex": 0,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"Title": "settings.json",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\bin\\Debug\\net8.0\\settings.json",
|
||||
"RelativeDocumentMoniker": "FRNWebSocket\\bin\\Debug\\net8.0\\settings.json",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\bin\\Debug\\net8.0\\settings.json",
|
||||
"RelativeToolTip": "FRNWebSocket\\bin\\Debug\\net8.0\\settings.json",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
|
||||
"WhenOpened": "2024-11-03T00:23:09.199Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
"Name": "ST:0:0:{e5c86464-96be-4d7c-9a8b-abcb3bbf5f92}"
|
||||
},
|
||||
{
|
||||
"$type": "Bookmark",
|
||||
"Name": "ST:0:0:{cce594b6-0c39-4442-ba28-10c64ac7e89f}"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 6,
|
||||
"Title": "config.json",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\Desktop\\FRN\\web\u002B\\config\\config.json",
|
||||
"RelativeDocumentMoniker": "..\\..\\..\\Desktop\\FRN\\web\u002B\\config\\config.json",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\Desktop\\FRN\\web\u002B\\config\\config.json",
|
||||
"RelativeToolTip": "..\\..\\..\\Desktop\\FRN\\web\u002B\\config\\config.json",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
|
||||
"WhenOpened": "2024-11-02T14:57:47.741Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"Title": "WSAudioStream.cs",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\WSAudioStream.cs",
|
||||
"RelativeDocumentMoniker": "FRNWebSocket\\WSAudioStream.cs",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\WSAudioStream.cs",
|
||||
"RelativeToolTip": "FRNWebSocket\\WSAudioStream.cs",
|
||||
"ViewState": "AgIAACkAAAAAAAAAAAAUwDwAAAAWAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-11-01T23:17:14.816Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 3,
|
||||
"Title": "SettingsLoader.cs",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\SettingsLoader.cs",
|
||||
"RelativeDocumentMoniker": "FRNWebSocket\\SettingsLoader.cs",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\SettingsLoader.cs",
|
||||
"RelativeToolTip": "FRNWebSocket\\SettingsLoader.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-11-01T23:16:28.575Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 5,
|
||||
"Title": "FRNWebSocket.csproj",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\FRNWebSocket.csproj",
|
||||
"RelativeDocumentMoniker": "FRNWebSocket\\FRNWebSocket.csproj",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\FRNWebSocket.csproj",
|
||||
"RelativeToolTip": "FRNWebSocket\\FRNWebSocket.csproj",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
|
||||
"WhenOpened": "2024-11-01T23:15:42.799Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 8,
|
||||
"Title": "sharpFRN.csproj",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\sharpFRN.csproj",
|
||||
"RelativeDocumentMoniker": "sharpFRN\\sharpFRN.csproj",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\sharpFRN.csproj",
|
||||
"RelativeToolTip": "sharpFRN\\sharpFRN.csproj",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAAfAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
|
||||
"WhenOpened": "2024-11-01T23:15:25.225Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"Title": "Program.cs",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\Program.cs",
|
||||
"RelativeDocumentMoniker": "FRNWebSocket\\Program.cs",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\Program.cs",
|
||||
"RelativeToolTip": "FRNWebSocket\\Program.cs",
|
||||
"ViewState": "AgIAAB8AAAAAAAAAAAAQwDUAAAAlAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-11-01T23:13:24.793Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 7,
|
||||
"Title": "sharpFRN",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\sharpFRN.csproj",
|
||||
"RelativeDocumentMoniker": "sharpFRN\\sharpFRN.csproj",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\sharpFRN.csproj",
|
||||
"RelativeToolTip": "sharpFRN\\sharpFRN.csproj",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
|
||||
"WhenOpened": "2024-10-30T23:37:29.101Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 4,
|
||||
"Title": "FRNClient.cs",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\FRNClient.cs",
|
||||
"RelativeDocumentMoniker": "sharpFRN\\FRNClient.cs",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\FRNClient.cs",
|
||||
"RelativeToolTip": "sharpFRN\\FRNClient.cs",
|
||||
"ViewState": "AgIAADUBAAAAAAAAAAAIwGkBAAANAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-10-30T23:30:07.344Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 9,
|
||||
"Title": "Settings.settings",
|
||||
"DocumentMoniker": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\Properties\\Settings.settings",
|
||||
"RelativeDocumentMoniker": "sharpFRN\\Properties\\Settings.settings",
|
||||
"ToolTip": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\sharpFRN\\Properties\\Settings.settings",
|
||||
"RelativeToolTip": "sharpFRN\\Properties\\Settings.settings",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.002767|",
|
||||
"WhenOpened": "2024-10-30T23:37:43.824Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
1
.vs/sharpFRN/v17/ResourceExplorer/settings.json
Normal file
1
.vs/sharpFRN/v17/ResourceExplorer/settings.json
Normal file
|
@ -0,0 +1 @@
|
|||
{"CustomColumnOrderings":{},"ShowValidationErrors":true,"SelectedResourceGroups":[],"VisibleColumnKeys":["name","neutral-value"]}
|
20
FRNWebSocket/FRNWebSocket.csproj
Normal file
20
FRNWebSocket/FRNWebSocket.csproj
Normal file
|
@ -0,0 +1,20 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NAudio" Version="2.2.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="sharpFRN">
|
||||
<HintPath>..\sharpFRN\bin\Release\net8.0-windows\sharpFRN.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
60
FRNWebSocket/Program.cs
Normal file
60
FRNWebSocket/Program.cs
Normal file
|
@ -0,0 +1,60 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using Monoculus;
|
||||
using NAudio.Wave;
|
||||
|
||||
namespace sharpFRN
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static WebSocketAudioStreamer audioStreamer = new WebSocketAudioStreamer();
|
||||
static Settings settings = new Settings();
|
||||
|
||||
static async Task Main(string[] args)
|
||||
{
|
||||
settings = SettingsLoader.Load("settings.json");
|
||||
|
||||
audioStreamer.StartWebSocketServerAsync(settings.WebSocketHost);
|
||||
|
||||
// Initialize the FRN client
|
||||
var client = new FRNClient(
|
||||
host: settings.FRNClient.Host,
|
||||
port: settings.FRNClient.Port,
|
||||
callSign: settings.FRNClient.CallSign,
|
||||
name: settings.FRNClient.Name,
|
||||
email: settings.FRNClient.Email,
|
||||
password: settings.FRNClient.Password,
|
||||
network: settings.FRNClient.Network,
|
||||
country: settings.FRNClient.Country,
|
||||
city: settings.FRNClient.City,
|
||||
locator: settings.FRNClient.Locator,
|
||||
type: settings.FRNClient.Type,
|
||||
description: settings.FRNClient.Description
|
||||
);
|
||||
|
||||
client.OnConnect += () => Console.WriteLine("Connected to the server.");
|
||||
client.OnDisconnect += () => Console.WriteLine("Disconnected from the server.");
|
||||
client.OnLogin += () => Console.WriteLine("Logged in successfully.");
|
||||
client.OnMessageReceived += (message) => Console.WriteLine($"Message received: {message}");
|
||||
client.OnClientListReceived += (clients) =>
|
||||
{
|
||||
Console.WriteLine("Client list updated:");
|
||||
foreach (var c in clients)
|
||||
{
|
||||
Console.WriteLine($"- {c.CallsignAndUser} ({c.ID})");
|
||||
}
|
||||
};
|
||||
client.OnVoiceDataReceived += (voiceData, clientIndex) =>
|
||||
{
|
||||
Console.WriteLine($"Voice data received at index {clientIndex}");
|
||||
|
||||
// Decode and play the voice data chunk
|
||||
//PlayGSMChunk(voiceData);
|
||||
audioStreamer.PlayGSMChunk(voiceData);
|
||||
};
|
||||
|
||||
await client.RunAsync();
|
||||
}
|
||||
}
|
||||
}
|
42
FRNWebSocket/SettingsLoader.cs
Normal file
42
FRNWebSocket/SettingsLoader.cs
Normal file
|
@ -0,0 +1,42 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace sharpFRN
|
||||
{
|
||||
public class Settings
|
||||
{
|
||||
public string WebSocketHost { get; set; }
|
||||
public FRNSettings FRNClient { get; set; }
|
||||
}
|
||||
|
||||
public class FRNSettings
|
||||
{
|
||||
public string Host { get; set; }
|
||||
public int Port { get; set; }
|
||||
public string CallSign { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Email { get; set; }
|
||||
public string Password { get; set; }
|
||||
public string Network { get; set; }
|
||||
public string Country { get; set; }
|
||||
public string City { get; set; }
|
||||
public string Locator { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Description { get; set; }
|
||||
}
|
||||
|
||||
public static class SettingsLoader
|
||||
{
|
||||
public static Settings Load(string filePath)
|
||||
{
|
||||
if (!File.Exists(filePath))
|
||||
{
|
||||
throw new FileNotFoundException($"Settings file not found: {filePath}");
|
||||
}
|
||||
|
||||
string json = File.ReadAllText(filePath);
|
||||
return JsonSerializer.Deserialize<Settings>(json);
|
||||
}
|
||||
}
|
||||
}
|
134
FRNWebSocket/WSAudioStream.cs
Normal file
134
FRNWebSocket/WSAudioStream.cs
Normal file
|
@ -0,0 +1,134 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.WebSockets;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using NAudio.Wave;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
namespace sharpFRN
|
||||
{
|
||||
public class WebSocketAudioStreamer
|
||||
{
|
||||
private WaveOutEvent waveOut;
|
||||
private BufferedWaveProvider bufferedWaveProvider;
|
||||
private HttpListener httpListener;
|
||||
private ConcurrentDictionary<string, WebSocket> webSockets = new ConcurrentDictionary<string, WebSocket>();
|
||||
|
||||
public WebSocketAudioStreamer()
|
||||
{
|
||||
InitializeGsmDecoder();
|
||||
}
|
||||
|
||||
private void InitializeGsmDecoder()
|
||||
{
|
||||
WaveFormat pcmFormat = new WaveFormat(8000, 16, 1);
|
||||
|
||||
waveOut = new WaveOutEvent();
|
||||
bufferedWaveProvider = new BufferedWaveProvider(pcmFormat)
|
||||
{
|
||||
BufferDuration = TimeSpan.FromSeconds(5) // Adjust if needed
|
||||
};
|
||||
waveOut.Init(bufferedWaveProvider);
|
||||
waveOut.Play();
|
||||
}
|
||||
|
||||
public void PlayGSMChunk(byte[] voiceData)
|
||||
{
|
||||
if (voiceData.Length != 325)
|
||||
{
|
||||
Console.WriteLine($"Unexpected voice data length: {voiceData.Length}");
|
||||
return;
|
||||
}
|
||||
|
||||
int frameSize = 65; // GSM frame size
|
||||
int numFrames = voiceData.Length / frameSize;
|
||||
|
||||
for (int i = 0; i < numFrames; i++)
|
||||
{
|
||||
byte[] gsmFrame = new byte[frameSize];
|
||||
Array.Copy(voiceData, i * frameSize, gsmFrame, 0, frameSize);
|
||||
|
||||
using (var gsmStream = new RawSourceWaveStream(new MemoryStream(gsmFrame), new Gsm610WaveFormat()))
|
||||
using (var pcmStream = WaveFormatConversionStream.CreatePcmStream(gsmStream))
|
||||
{
|
||||
byte[] buffer = new byte[pcmStream.Length];
|
||||
int bytesRead = pcmStream.Read(buffer, 0, buffer.Length);
|
||||
|
||||
// Add the PCM data to the BufferedWaveProvider
|
||||
//bufferedWaveProvider.AddSamples(buffer, 0, bytesRead);
|
||||
|
||||
// Send the PCM data to all connected WebSocket clients
|
||||
BroadcastToWebSockets(buffer, 0, bytesRead);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async Task StartWebSocketServerAsync(string urlPrefix)
|
||||
{
|
||||
httpListener = new HttpListener();
|
||||
httpListener.Prefixes.Add(urlPrefix);
|
||||
httpListener.Start();
|
||||
Console.WriteLine($"WebSocket server started at {urlPrefix}");
|
||||
|
||||
while (true)
|
||||
{
|
||||
var httpContext = await httpListener.GetContextAsync();
|
||||
|
||||
if (httpContext.Request.IsWebSocketRequest)
|
||||
{
|
||||
var webSocketContext = await httpContext.AcceptWebSocketAsync(null);
|
||||
var webSocket = webSocketContext.WebSocket;
|
||||
string clientId = Guid.NewGuid().ToString();
|
||||
webSockets.TryAdd(clientId, webSocket);
|
||||
Console.WriteLine($"WebSocket client connected: {clientId}");
|
||||
|
||||
_ = Task.Run(() => HandleWebSocketConnectionAsync(clientId, webSocket));
|
||||
}
|
||||
else
|
||||
{
|
||||
httpContext.Response.StatusCode = 400;
|
||||
httpContext.Response.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task HandleWebSocketConnectionAsync(string clientId, WebSocket webSocket)
|
||||
{
|
||||
var buffer = new byte[1024];
|
||||
try
|
||||
{
|
||||
while (webSocket.State == WebSocketState.Open)
|
||||
{
|
||||
var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
|
||||
if (result.MessageType == WebSocketMessageType.Close)
|
||||
{
|
||||
await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"WebSocket error: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
webSockets.TryRemove(clientId, out _);
|
||||
Console.WriteLine($"WebSocket client disconnected: {clientId}");
|
||||
}
|
||||
}
|
||||
|
||||
private void BroadcastToWebSockets(byte[] buffer, int offset, int count)
|
||||
{
|
||||
foreach (var webSocket in webSockets.Values)
|
||||
{
|
||||
if (webSocket.State == WebSocketState.Open)
|
||||
{
|
||||
webSocket.SendAsync(new ArraySegment<byte>(buffer, offset, count), WebSocketMessageType.Binary, true, CancellationToken.None).Wait();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
193
FRNWebSocket/bin/Debug/net8.0/FRNWebSocket.deps.json
Normal file
193
FRNWebSocket/bin/Debug/net8.0/FRNWebSocket.deps.json
Normal file
|
@ -0,0 +1,193 @@
|
|||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v8.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v8.0": {
|
||||
"FRNWebSocket/1.0.0": {
|
||||
"dependencies": {
|
||||
"NAudio": "2.2.1",
|
||||
"sharpFRN": "1.0.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"FRNWebSocket.dll": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.NETCore.Platforms/3.1.0": {},
|
||||
"Microsoft.Win32.Registry/4.7.0": {
|
||||
"dependencies": {
|
||||
"System.Security.AccessControl": "4.7.0",
|
||||
"System.Security.Principal.Windows": "4.7.0"
|
||||
}
|
||||
},
|
||||
"NAudio/2.2.1": {
|
||||
"dependencies": {
|
||||
"NAudio.Asio": "2.2.1",
|
||||
"NAudio.Core": "2.2.1",
|
||||
"NAudio.Midi": "2.2.1",
|
||||
"NAudio.Wasapi": "2.2.1",
|
||||
"NAudio.WinMM": "2.2.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/NAudio.dll": {
|
||||
"assemblyVersion": "2.2.1.0",
|
||||
"fileVersion": "2.2.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.Asio/2.2.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Win32.Registry": "4.7.0",
|
||||
"NAudio.Core": "2.2.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.Asio.dll": {
|
||||
"assemblyVersion": "2.2.1.0",
|
||||
"fileVersion": "2.2.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.Core/2.2.1": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.Core.dll": {
|
||||
"assemblyVersion": "2.2.1.0",
|
||||
"fileVersion": "2.2.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.Midi/2.2.1": {
|
||||
"dependencies": {
|
||||
"NAudio.Core": "2.2.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.Midi.dll": {
|
||||
"assemblyVersion": "2.2.1.0",
|
||||
"fileVersion": "2.2.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.Wasapi/2.2.1": {
|
||||
"dependencies": {
|
||||
"NAudio.Core": "2.2.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.Wasapi.dll": {
|
||||
"assemblyVersion": "2.2.1.0",
|
||||
"fileVersion": "2.2.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.WinMM/2.2.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Win32.Registry": "4.7.0",
|
||||
"NAudio.Core": "2.2.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.WinMM.dll": {
|
||||
"assemblyVersion": "2.2.1.0",
|
||||
"fileVersion": "2.2.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.AccessControl/4.7.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "3.1.0",
|
||||
"System.Security.Principal.Windows": "4.7.0"
|
||||
}
|
||||
},
|
||||
"System.Security.Principal.Windows/4.7.0": {},
|
||||
"sharpFRN/1.0.0.0": {
|
||||
"runtime": {
|
||||
"sharpFRN.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"FRNWebSocket/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Microsoft.NETCore.Platforms/3.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==",
|
||||
"path": "microsoft.netcore.platforms/3.1.0",
|
||||
"hashPath": "microsoft.netcore.platforms.3.1.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Win32.Registry/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==",
|
||||
"path": "microsoft.win32.registry/4.7.0",
|
||||
"hashPath": "microsoft.win32.registry.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"NAudio/2.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-c0DzwiyyklM0TP39Y7RObwO3QkWecgM6H60ikiEnsV/aEAJPbj5MFCLaD8BSfKuZe0HGuh9GRGWWlJmSxDc9MA==",
|
||||
"path": "naudio/2.2.1",
|
||||
"hashPath": "naudio.2.2.1.nupkg.sha512"
|
||||
},
|
||||
"NAudio.Asio/2.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-hQglyOT5iT3XuGpBP8ZG0+aoqwRfidHjTNehpoWwX0g6KJEgtH2VaqM2nuJ2mheKZa/IBqB4YQTZVvrIapzfOA==",
|
||||
"path": "naudio.asio/2.2.1",
|
||||
"hashPath": "naudio.asio.2.2.1.nupkg.sha512"
|
||||
},
|
||||
"NAudio.Core/2.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-GgkdP6K/7FqXFo7uHvoqGZTJvW4z8g2IffhOO4JHaLzKCdDOUEzVKtveoZkCuUX8eV2HAINqi7VFqlFndrnz/g==",
|
||||
"path": "naudio.core/2.2.1",
|
||||
"hashPath": "naudio.core.2.2.1.nupkg.sha512"
|
||||
},
|
||||
"NAudio.Midi/2.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-6r23ylGo5aeP02WFXsPquz0T0hFJWyh+7t++tz19tc3Kr38NHm+Z9j+FiAv+xkH8tZqXJqus9Q8p6u7bidIgbw==",
|
||||
"path": "naudio.midi/2.2.1",
|
||||
"hashPath": "naudio.midi.2.2.1.nupkg.sha512"
|
||||
},
|
||||
"NAudio.Wasapi/2.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-lFfXoqacZZe0WqNChJgGYI+XV/n/61LzPHT3C1CJp4khoxeo2sziyX5wzNYWeCMNbsWxFvT3b3iXeY1UYjBhZw==",
|
||||
"path": "naudio.wasapi/2.2.1",
|
||||
"hashPath": "naudio.wasapi.2.2.1.nupkg.sha512"
|
||||
},
|
||||
"NAudio.WinMM/2.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-xFHRFwH4x6aq3IxRbewvO33ugJRvZFEOfO62i7uQJRUNW2cnu6BeBTHUS0JD5KBucZbHZaYqxQG8dwZ47ezQuQ==",
|
||||
"path": "naudio.winmm/2.2.1",
|
||||
"hashPath": "naudio.winmm.2.2.1.nupkg.sha512"
|
||||
},
|
||||
"System.Security.AccessControl/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==",
|
||||
"path": "system.security.accesscontrol/4.7.0",
|
||||
"hashPath": "system.security.accesscontrol.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"System.Security.Principal.Windows/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==",
|
||||
"path": "system.security.principal.windows/4.7.0",
|
||||
"hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"sharpFRN/1.0.0.0": {
|
||||
"type": "reference",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
}
|
||||
}
|
||||
}
|
BIN
FRNWebSocket/bin/Debug/net8.0/FRNWebSocket.dll
Normal file
BIN
FRNWebSocket/bin/Debug/net8.0/FRNWebSocket.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Debug/net8.0/FRNWebSocket.exe
Normal file
BIN
FRNWebSocket/bin/Debug/net8.0/FRNWebSocket.exe
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Debug/net8.0/FRNWebSocket.pdb
Normal file
BIN
FRNWebSocket/bin/Debug/net8.0/FRNWebSocket.pdb
Normal file
Binary file not shown.
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net8.0",
|
||||
"framework": {
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "8.0.0"
|
||||
},
|
||||
"configProperties": {
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||
}
|
||||
}
|
||||
}
|
BIN
FRNWebSocket/bin/Debug/net8.0/FRN_Websocket.zip
Normal file
BIN
FRNWebSocket/bin/Debug/net8.0/FRN_Websocket.zip
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Debug/net8.0/NAudio.Asio.dll
Normal file
BIN
FRNWebSocket/bin/Debug/net8.0/NAudio.Asio.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Debug/net8.0/NAudio.Core.dll
Normal file
BIN
FRNWebSocket/bin/Debug/net8.0/NAudio.Core.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Debug/net8.0/NAudio.Midi.dll
Normal file
BIN
FRNWebSocket/bin/Debug/net8.0/NAudio.Midi.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Debug/net8.0/NAudio.Wasapi.dll
Normal file
BIN
FRNWebSocket/bin/Debug/net8.0/NAudio.Wasapi.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Debug/net8.0/NAudio.WinMM.dll
Normal file
BIN
FRNWebSocket/bin/Debug/net8.0/NAudio.WinMM.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Debug/net8.0/NAudio.dll
Normal file
BIN
FRNWebSocket/bin/Debug/net8.0/NAudio.dll
Normal file
Binary file not shown.
17
FRNWebSocket/bin/Debug/net8.0/settings.json
Normal file
17
FRNWebSocket/bin/Debug/net8.0/settings.json
Normal file
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"WebSocketHost": "http://localhost:5000/",
|
||||
"FRNClient": {
|
||||
"Host": "server.voip-italia.net",
|
||||
"Port": 10024,
|
||||
"CallSign": "ZERO0",
|
||||
"Name": "Test",
|
||||
"Email": "your.email@example.com",
|
||||
"Password": "PASSWORD",
|
||||
"Network": "Nazionale",
|
||||
"Country": "Internet",
|
||||
"City": "Monoculus",
|
||||
"Locator": "Network",
|
||||
"Type": "Crosslink",
|
||||
"Description": "Hi"
|
||||
}
|
||||
}
|
BIN
FRNWebSocket/bin/Debug/net8.0/sharpFRN.dll
Normal file
BIN
FRNWebSocket/bin/Debug/net8.0/sharpFRN.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Debug/net8.0/sharpFRN.pdb
Normal file
BIN
FRNWebSocket/bin/Debug/net8.0/sharpFRN.pdb
Normal file
Binary file not shown.
127
FRNWebSocket/bin/Debug/net8.0/websocket.html
Normal file
127
FRNWebSocket/bin/Debug/net8.0/websocket.html
Normal file
|
@ -0,0 +1,127 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>FRN Websocket</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
background-color: #121212;
|
||||
color: #ffffff;
|
||||
}
|
||||
.vu-meter {
|
||||
width: 100%;
|
||||
height: 20px;
|
||||
background-color: #444;
|
||||
position: relative;
|
||||
}
|
||||
.vu-meter-fill {
|
||||
height: 100%;
|
||||
background-color: #0f0;
|
||||
width: 0%;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="container py-5">
|
||||
<h1 class="mb-4">FRN WebSocket</h1>
|
||||
<button id="connectButton" class="btn btn-primary mb-3">Connect to Audio Stream</button>
|
||||
<p id="status" class="mb-3">Status: Disconnected</p>
|
||||
<div class="vu-meter mb-3">
|
||||
<div id="vuMeterFill" class="vu-meter-fill"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const connectButton = document.getElementById('connectButton');
|
||||
const statusElement = document.getElementById('status');
|
||||
const vuMeterFill = document.getElementById('vuMeterFill');
|
||||
let audioContext;
|
||||
let websocket;
|
||||
let analyser;
|
||||
let dataArray;
|
||||
let isPlayingAudio = false;
|
||||
|
||||
connectButton.addEventListener('click', () => {
|
||||
if (websocket && websocket.readyState === WebSocket.OPEN) {
|
||||
websocket.close();
|
||||
connectButton.textContent = 'Connect to Audio Stream';
|
||||
statusElement.textContent = 'Status: Disconnected';
|
||||
isPlayingAudio = false;
|
||||
} else {
|
||||
startWebSocketConnection();
|
||||
}
|
||||
});
|
||||
|
||||
function startWebSocketConnection() {
|
||||
websocket = new WebSocket('ws://192.168.1.50/ws/');
|
||||
websocket.binaryType = 'arraybuffer';
|
||||
|
||||
websocket.onopen = () => {
|
||||
connectButton.textContent = 'Disconnect from Audio Stream';
|
||||
statusElement.textContent = 'Status: Connected';
|
||||
audioContext = new (window.AudioContext || window.webkitAudioContext)();
|
||||
analyser = audioContext.createAnalyser();
|
||||
analyser.fftSize = 256;
|
||||
const bufferLength = analyser.frequencyBinCount;
|
||||
dataArray = new Uint8Array(bufferLength);
|
||||
};
|
||||
|
||||
websocket.onmessage = (event) => {
|
||||
playAudioChunk(event.data);
|
||||
};
|
||||
|
||||
websocket.onclose = () => {
|
||||
connectButton.textContent = 'Connect to Audio Stream';
|
||||
statusElement.textContent = 'Status: Disconnected';
|
||||
isPlayingAudio = false;
|
||||
vuMeterFill.style.width = '0%';
|
||||
};
|
||||
|
||||
websocket.onerror = (error) => {
|
||||
console.error('WebSocket error:', error);
|
||||
};
|
||||
}
|
||||
|
||||
function playAudioChunk(arrayBuffer) {
|
||||
try {
|
||||
const audioBuffer = audioContext.createBuffer(1, arrayBuffer.byteLength / 2, audioContext.sampleRate);
|
||||
const audioData = new Float32Array(arrayBuffer.byteLength / 2);
|
||||
const dataView = new DataView(arrayBuffer);
|
||||
for (let i = 0; i < audioData.length; i++) {
|
||||
audioData[i] = dataView.getInt16(i * 2, true) / 32768;
|
||||
}
|
||||
audioBuffer.copyToChannel(audioData, 0);
|
||||
|
||||
const source = audioContext.createBufferSource();
|
||||
source.buffer = audioBuffer;
|
||||
source.connect(analyser);
|
||||
analyser.connect(audioContext.destination);
|
||||
source.start(0);
|
||||
isPlayingAudio = true;
|
||||
visualizeAudio();
|
||||
|
||||
source.onended = () => {
|
||||
isPlayingAudio = false;
|
||||
vuMeterFill.style.width = '0%';
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('Error processing audio data:', error);
|
||||
}
|
||||
}
|
||||
|
||||
function visualizeAudio() {
|
||||
if (isPlayingAudio) {
|
||||
analyser.getByteFrequencyData(dataArray);
|
||||
let sum = 0;
|
||||
for (let i = 0; i < dataArray.length; i++) {
|
||||
sum += dataArray[i];
|
||||
}
|
||||
const average = sum / dataArray.length;
|
||||
const percentage = (average / 256) * 100;
|
||||
vuMeterFill.style.width = percentage + '%';
|
||||
requestAnimationFrame(visualizeAudio);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
193
FRNWebSocket/bin/Release/net8.0/FRNWebSocket.deps.json
Normal file
193
FRNWebSocket/bin/Release/net8.0/FRNWebSocket.deps.json
Normal file
|
@ -0,0 +1,193 @@
|
|||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v8.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v8.0": {
|
||||
"FRNWebSocket/1.0.0": {
|
||||
"dependencies": {
|
||||
"NAudio": "2.2.1",
|
||||
"sharpFRN": "1.0.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"FRNWebSocket.dll": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.NETCore.Platforms/3.1.0": {},
|
||||
"Microsoft.Win32.Registry/4.7.0": {
|
||||
"dependencies": {
|
||||
"System.Security.AccessControl": "4.7.0",
|
||||
"System.Security.Principal.Windows": "4.7.0"
|
||||
}
|
||||
},
|
||||
"NAudio/2.2.1": {
|
||||
"dependencies": {
|
||||
"NAudio.Asio": "2.2.1",
|
||||
"NAudio.Core": "2.2.1",
|
||||
"NAudio.Midi": "2.2.1",
|
||||
"NAudio.Wasapi": "2.2.1",
|
||||
"NAudio.WinMM": "2.2.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/NAudio.dll": {
|
||||
"assemblyVersion": "2.2.1.0",
|
||||
"fileVersion": "2.2.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.Asio/2.2.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Win32.Registry": "4.7.0",
|
||||
"NAudio.Core": "2.2.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.Asio.dll": {
|
||||
"assemblyVersion": "2.2.1.0",
|
||||
"fileVersion": "2.2.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.Core/2.2.1": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.Core.dll": {
|
||||
"assemblyVersion": "2.2.1.0",
|
||||
"fileVersion": "2.2.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.Midi/2.2.1": {
|
||||
"dependencies": {
|
||||
"NAudio.Core": "2.2.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.Midi.dll": {
|
||||
"assemblyVersion": "2.2.1.0",
|
||||
"fileVersion": "2.2.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.Wasapi/2.2.1": {
|
||||
"dependencies": {
|
||||
"NAudio.Core": "2.2.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.Wasapi.dll": {
|
||||
"assemblyVersion": "2.2.1.0",
|
||||
"fileVersion": "2.2.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.WinMM/2.2.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Win32.Registry": "4.7.0",
|
||||
"NAudio.Core": "2.2.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.WinMM.dll": {
|
||||
"assemblyVersion": "2.2.1.0",
|
||||
"fileVersion": "2.2.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.AccessControl/4.7.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "3.1.0",
|
||||
"System.Security.Principal.Windows": "4.7.0"
|
||||
}
|
||||
},
|
||||
"System.Security.Principal.Windows/4.7.0": {},
|
||||
"sharpFRN/1.0.0.0": {
|
||||
"runtime": {
|
||||
"sharpFRN.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"FRNWebSocket/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Microsoft.NETCore.Platforms/3.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==",
|
||||
"path": "microsoft.netcore.platforms/3.1.0",
|
||||
"hashPath": "microsoft.netcore.platforms.3.1.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Win32.Registry/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==",
|
||||
"path": "microsoft.win32.registry/4.7.0",
|
||||
"hashPath": "microsoft.win32.registry.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"NAudio/2.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-c0DzwiyyklM0TP39Y7RObwO3QkWecgM6H60ikiEnsV/aEAJPbj5MFCLaD8BSfKuZe0HGuh9GRGWWlJmSxDc9MA==",
|
||||
"path": "naudio/2.2.1",
|
||||
"hashPath": "naudio.2.2.1.nupkg.sha512"
|
||||
},
|
||||
"NAudio.Asio/2.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-hQglyOT5iT3XuGpBP8ZG0+aoqwRfidHjTNehpoWwX0g6KJEgtH2VaqM2nuJ2mheKZa/IBqB4YQTZVvrIapzfOA==",
|
||||
"path": "naudio.asio/2.2.1",
|
||||
"hashPath": "naudio.asio.2.2.1.nupkg.sha512"
|
||||
},
|
||||
"NAudio.Core/2.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-GgkdP6K/7FqXFo7uHvoqGZTJvW4z8g2IffhOO4JHaLzKCdDOUEzVKtveoZkCuUX8eV2HAINqi7VFqlFndrnz/g==",
|
||||
"path": "naudio.core/2.2.1",
|
||||
"hashPath": "naudio.core.2.2.1.nupkg.sha512"
|
||||
},
|
||||
"NAudio.Midi/2.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-6r23ylGo5aeP02WFXsPquz0T0hFJWyh+7t++tz19tc3Kr38NHm+Z9j+FiAv+xkH8tZqXJqus9Q8p6u7bidIgbw==",
|
||||
"path": "naudio.midi/2.2.1",
|
||||
"hashPath": "naudio.midi.2.2.1.nupkg.sha512"
|
||||
},
|
||||
"NAudio.Wasapi/2.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-lFfXoqacZZe0WqNChJgGYI+XV/n/61LzPHT3C1CJp4khoxeo2sziyX5wzNYWeCMNbsWxFvT3b3iXeY1UYjBhZw==",
|
||||
"path": "naudio.wasapi/2.2.1",
|
||||
"hashPath": "naudio.wasapi.2.2.1.nupkg.sha512"
|
||||
},
|
||||
"NAudio.WinMM/2.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-xFHRFwH4x6aq3IxRbewvO33ugJRvZFEOfO62i7uQJRUNW2cnu6BeBTHUS0JD5KBucZbHZaYqxQG8dwZ47ezQuQ==",
|
||||
"path": "naudio.winmm/2.2.1",
|
||||
"hashPath": "naudio.winmm.2.2.1.nupkg.sha512"
|
||||
},
|
||||
"System.Security.AccessControl/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==",
|
||||
"path": "system.security.accesscontrol/4.7.0",
|
||||
"hashPath": "system.security.accesscontrol.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"System.Security.Principal.Windows/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==",
|
||||
"path": "system.security.principal.windows/4.7.0",
|
||||
"hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"sharpFRN/1.0.0.0": {
|
||||
"type": "reference",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
}
|
||||
}
|
||||
}
|
BIN
FRNWebSocket/bin/Release/net8.0/FRNWebSocket.dll
Normal file
BIN
FRNWebSocket/bin/Release/net8.0/FRNWebSocket.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Release/net8.0/FRNWebSocket.exe
Normal file
BIN
FRNWebSocket/bin/Release/net8.0/FRNWebSocket.exe
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Release/net8.0/FRNWebSocket.pdb
Normal file
BIN
FRNWebSocket/bin/Release/net8.0/FRNWebSocket.pdb
Normal file
Binary file not shown.
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net8.0",
|
||||
"framework": {
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "8.0.0"
|
||||
},
|
||||
"configProperties": {
|
||||
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||
}
|
||||
}
|
||||
}
|
BIN
FRNWebSocket/bin/Release/net8.0/NAudio.Asio.dll
Normal file
BIN
FRNWebSocket/bin/Release/net8.0/NAudio.Asio.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Release/net8.0/NAudio.Core.dll
Normal file
BIN
FRNWebSocket/bin/Release/net8.0/NAudio.Core.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Release/net8.0/NAudio.Midi.dll
Normal file
BIN
FRNWebSocket/bin/Release/net8.0/NAudio.Midi.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Release/net8.0/NAudio.Wasapi.dll
Normal file
BIN
FRNWebSocket/bin/Release/net8.0/NAudio.Wasapi.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Release/net8.0/NAudio.WinMM.dll
Normal file
BIN
FRNWebSocket/bin/Release/net8.0/NAudio.WinMM.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Release/net8.0/NAudio.dll
Normal file
BIN
FRNWebSocket/bin/Release/net8.0/NAudio.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Release/net8.0/sharpFRN.dll
Normal file
BIN
FRNWebSocket/bin/Release/net8.0/sharpFRN.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/bin/Release/net8.0/sharpFRN.pdb
Normal file
BIN
FRNWebSocket/bin/Release/net8.0/sharpFRN.pdb
Normal file
Binary file not shown.
|
@ -0,0 +1,4 @@
|
|||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
|
23
FRNWebSocket/obj/Debug/net8.0/FRNWebSocket.AssemblyInfo.cs
Normal file
23
FRNWebSocket/obj/Debug/net8.0/FRNWebSocket.AssemblyInfo.cs
Normal file
|
@ -0,0 +1,23 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Il codice è stato generato da uno strumento.
|
||||
// Versione runtime:4.0.30319.42000
|
||||
//
|
||||
// Le modifiche apportate a questo file possono provocare un comportamento non corretto e andranno perse se
|
||||
// il codice viene rigenerato.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("FRNWebSocket")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("FRNWebSocket")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("FRNWebSocket")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// Generato dalla classe WriteCodeFragment di MSBuild.
|
||||
|
|
@ -0,0 +1 @@
|
|||
fae450e35fa326afed028a174c19d5b435f7e49986a2666352729b95a5af80c3
|
|
@ -0,0 +1,13 @@
|
|||
is_global = true
|
||||
build_property.TargetFramework = net8.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = FRNWebSocket
|
||||
build_property.ProjectDir = C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
|
@ -0,0 +1,8 @@
|
|||
// <auto-generated/>
|
||||
global using global::System;
|
||||
global using global::System.Collections.Generic;
|
||||
global using global::System.IO;
|
||||
global using global::System.Linq;
|
||||
global using global::System.Net.Http;
|
||||
global using global::System.Threading;
|
||||
global using global::System.Threading.Tasks;
|
BIN
FRNWebSocket/obj/Debug/net8.0/FRNWebSocket.assets.cache
Normal file
BIN
FRNWebSocket/obj/Debug/net8.0/FRNWebSocket.assets.cache
Normal file
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
fb064c69498f477a3cd5e2be16d49e94e9e466a4972e0559dcf79488f2d696a3
|
|
@ -0,0 +1,24 @@
|
|||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Debug\net8.0\FRNWebSocket.exe
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Debug\net8.0\FRNWebSocket.deps.json
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Debug\net8.0\FRNWebSocket.runtimeconfig.json
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Debug\net8.0\FRNWebSocket.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Debug\net8.0\FRNWebSocket.pdb
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Debug\net8.0\NAudio.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Debug\net8.0\NAudio.Asio.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Debug\net8.0\NAudio.Core.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Debug\net8.0\NAudio.Midi.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Debug\net8.0\NAudio.Wasapi.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Debug\net8.0\NAudio.WinMM.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Debug\net8.0\sharpFRN.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Debug\net8.0\sharpFRN.pdb
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Debug\net8.0\FRNWebSocket.csproj.AssemblyReference.cache
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Debug\net8.0\FRNWebSocket.GeneratedMSBuildEditorConfig.editorconfig
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Debug\net8.0\FRNWebSocket.AssemblyInfoInputs.cache
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Debug\net8.0\FRNWebSocket.AssemblyInfo.cs
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Debug\net8.0\FRNWebSocket.csproj.CoreCompileInputs.cache
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Debug\net8.0\FRNWebSo.9D9585D7.Up2Date
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Debug\net8.0\FRNWebSocket.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Debug\net8.0\refint\FRNWebSocket.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Debug\net8.0\FRNWebSocket.pdb
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Debug\net8.0\FRNWebSocket.genruntimeconfig.cache
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Debug\net8.0\ref\FRNWebSocket.dll
|
BIN
FRNWebSocket/obj/Debug/net8.0/FRNWebSocket.dll
Normal file
BIN
FRNWebSocket/obj/Debug/net8.0/FRNWebSocket.dll
Normal file
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
4c814e49796799a6801f8c0438596b1d566cc2cb3ed68e5a0b786bdee327d628
|
BIN
FRNWebSocket/obj/Debug/net8.0/FRNWebSocket.pdb
Normal file
BIN
FRNWebSocket/obj/Debug/net8.0/FRNWebSocket.pdb
Normal file
Binary file not shown.
BIN
FRNWebSocket/obj/Debug/net8.0/apphost.exe
Normal file
BIN
FRNWebSocket/obj/Debug/net8.0/apphost.exe
Normal file
Binary file not shown.
BIN
FRNWebSocket/obj/Debug/net8.0/ref/FRNWebSocket.dll
Normal file
BIN
FRNWebSocket/obj/Debug/net8.0/ref/FRNWebSocket.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/obj/Debug/net8.0/refint/FRNWebSocket.dll
Normal file
BIN
FRNWebSocket/obj/Debug/net8.0/refint/FRNWebSocket.dll
Normal file
Binary file not shown.
74
FRNWebSocket/obj/FRNWebSocket.csproj.nuget.dgspec.json
Normal file
74
FRNWebSocket/obj/FRNWebSocket.csproj.nuget.dgspec.json
Normal file
|
@ -0,0 +1,74 @@
|
|||
{
|
||||
"format": 1,
|
||||
"restore": {
|
||||
"C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\FRNWebSocket.csproj": {}
|
||||
},
|
||||
"projects": {
|
||||
"C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\FRNWebSocket.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\FRNWebSocket.csproj",
|
||||
"projectName": "FRNWebSocket",
|
||||
"projectPath": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\FRNWebSocket.csproj",
|
||||
"packagesPath": "C:\\Users\\Andrea Santaniello\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\obj\\",
|
||||
"projectStyle": "PackageReference",
|
||||
"configFilePaths": [
|
||||
"C:\\Users\\Andrea Santaniello\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net8.0"
|
||||
],
|
||||
"sources": {
|
||||
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net8.0": {
|
||||
"targetAlias": "net8.0",
|
||||
"projectReferences": {}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "direct"
|
||||
}
|
||||
},
|
||||
"frameworks": {
|
||||
"net8.0": {
|
||||
"targetAlias": "net8.0",
|
||||
"dependencies": {
|
||||
"NAudio": {
|
||||
"target": "Package",
|
||||
"version": "[2.2.1, )"
|
||||
}
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48",
|
||||
"net481"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"frameworkReferences": {
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.400/PortableRuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
15
FRNWebSocket/obj/FRNWebSocket.csproj.nuget.g.props
Normal file
15
FRNWebSocket/obj/FRNWebSocket.csproj.nuget.g.props
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
|
||||
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
||||
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
||||
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
|
||||
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Andrea Santaniello\.nuget\packages\</NuGetPackageFolders>
|
||||
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
||||
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.11.0</NuGetToolVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<SourceRoot Include="C:\Users\Andrea Santaniello\.nuget\packages\" />
|
||||
</ItemGroup>
|
||||
</Project>
|
2
FRNWebSocket/obj/FRNWebSocket.csproj.nuget.g.targets
Normal file
2
FRNWebSocket/obj/FRNWebSocket.csproj.nuget.g.targets
Normal file
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
|
|
@ -0,0 +1,4 @@
|
|||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
|
23
FRNWebSocket/obj/Release/net8.0/FRNWebSocket.AssemblyInfo.cs
Normal file
23
FRNWebSocket/obj/Release/net8.0/FRNWebSocket.AssemblyInfo.cs
Normal file
|
@ -0,0 +1,23 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Il codice è stato generato da uno strumento.
|
||||
// Versione runtime:4.0.30319.42000
|
||||
//
|
||||
// Le modifiche apportate a questo file possono provocare un comportamento non corretto e andranno perse se
|
||||
// il codice viene rigenerato.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("FRNWebSocket")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("FRNWebSocket")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("FRNWebSocket")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// Generato dalla classe WriteCodeFragment di MSBuild.
|
||||
|
|
@ -0,0 +1 @@
|
|||
b816b14ff92413ad1ed24840f9c9d498846ef98541a3ad64ab6b203c33f27ad7
|
|
@ -0,0 +1,13 @@
|
|||
is_global = true
|
||||
build_property.TargetFramework = net8.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = FRNWebSocket
|
||||
build_property.ProjectDir = C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
|
@ -0,0 +1,8 @@
|
|||
// <auto-generated/>
|
||||
global using global::System;
|
||||
global using global::System.Collections.Generic;
|
||||
global using global::System.IO;
|
||||
global using global::System.Linq;
|
||||
global using global::System.Net.Http;
|
||||
global using global::System.Threading;
|
||||
global using global::System.Threading.Tasks;
|
BIN
FRNWebSocket/obj/Release/net8.0/FRNWebSocket.assets.cache
Normal file
BIN
FRNWebSocket/obj/Release/net8.0/FRNWebSocket.assets.cache
Normal file
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
9b7ae5b731577ebceb993741f9c34fc2edb3cfa71fb60421e4275bab127df667
|
|
@ -0,0 +1,24 @@
|
|||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Release\net8.0\FRNWebSocket.csproj.AssemblyReference.cache
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Release\net8.0\FRNWebSocket.GeneratedMSBuildEditorConfig.editorconfig
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Release\net8.0\FRNWebSocket.AssemblyInfoInputs.cache
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Release\net8.0\FRNWebSocket.AssemblyInfo.cs
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Release\net8.0\FRNWebSocket.csproj.CoreCompileInputs.cache
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Release\net8.0\FRNWebSocket.exe
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Release\net8.0\FRNWebSocket.deps.json
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Release\net8.0\FRNWebSocket.runtimeconfig.json
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Release\net8.0\FRNWebSocket.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Release\net8.0\FRNWebSocket.pdb
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Release\net8.0\NAudio.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Release\net8.0\NAudio.Asio.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Release\net8.0\NAudio.Core.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Release\net8.0\NAudio.Midi.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Release\net8.0\NAudio.Wasapi.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Release\net8.0\NAudio.WinMM.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Release\net8.0\sharpFRN.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\bin\Release\net8.0\sharpFRN.pdb
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Release\net8.0\FRNWebSo.9D9585D7.Up2Date
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Release\net8.0\FRNWebSocket.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Release\net8.0\refint\FRNWebSocket.dll
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Release\net8.0\FRNWebSocket.pdb
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Release\net8.0\FRNWebSocket.genruntimeconfig.cache
|
||||
C:\Users\Andrea Santaniello\source\repos\sharpFRN\FRNWebSocket\obj\Release\net8.0\ref\FRNWebSocket.dll
|
BIN
FRNWebSocket/obj/Release/net8.0/FRNWebSocket.dll
Normal file
BIN
FRNWebSocket/obj/Release/net8.0/FRNWebSocket.dll
Normal file
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
560d4d7f825512e002fd31357d24b6b90a5e62de7de9757ef93b6977faac0714
|
BIN
FRNWebSocket/obj/Release/net8.0/FRNWebSocket.pdb
Normal file
BIN
FRNWebSocket/obj/Release/net8.0/FRNWebSocket.pdb
Normal file
Binary file not shown.
BIN
FRNWebSocket/obj/Release/net8.0/apphost.exe
Normal file
BIN
FRNWebSocket/obj/Release/net8.0/apphost.exe
Normal file
Binary file not shown.
BIN
FRNWebSocket/obj/Release/net8.0/ref/FRNWebSocket.dll
Normal file
BIN
FRNWebSocket/obj/Release/net8.0/ref/FRNWebSocket.dll
Normal file
Binary file not shown.
BIN
FRNWebSocket/obj/Release/net8.0/refint/FRNWebSocket.dll
Normal file
BIN
FRNWebSocket/obj/Release/net8.0/refint/FRNWebSocket.dll
Normal file
Binary file not shown.
522
FRNWebSocket/obj/project.assets.json
Normal file
522
FRNWebSocket/obj/project.assets.json
Normal file
|
@ -0,0 +1,522 @@
|
|||
{
|
||||
"version": 3,
|
||||
"targets": {
|
||||
"net8.0": {
|
||||
"Microsoft.NETCore.Platforms/3.1.0": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/netstandard1.0/_._": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard1.0/_._": {}
|
||||
}
|
||||
},
|
||||
"Microsoft.Win32.Registry/4.7.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"System.Security.AccessControl": "4.7.0",
|
||||
"System.Security.Principal.Windows": "4.7.0"
|
||||
},
|
||||
"compile": {
|
||||
"ref/netstandard2.0/Microsoft.Win32.Registry.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/unix/lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
|
||||
"assetType": "runtime",
|
||||
"rid": "unix"
|
||||
},
|
||||
"runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
|
||||
"assetType": "runtime",
|
||||
"rid": "win"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio/2.2.1": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"NAudio.Asio": "2.2.1",
|
||||
"NAudio.Core": "2.2.1",
|
||||
"NAudio.Midi": "2.2.1",
|
||||
"NAudio.Wasapi": "2.2.1",
|
||||
"NAudio.WinMM": "2.2.1"
|
||||
},
|
||||
"compile": {
|
||||
"lib/net6.0/NAudio.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/NAudio.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.Asio/2.2.1": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.Win32.Registry": "4.7.0",
|
||||
"NAudio.Core": "2.2.1"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard2.0/NAudio.Asio.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.Asio.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.Core/2.2.1": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/netstandard2.0/NAudio.Core.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.Core.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.Midi/2.2.1": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"NAudio.Core": "2.2.1"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard2.0/NAudio.Midi.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.Midi.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.Wasapi/2.2.1": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"NAudio.Core": "2.2.1"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard2.0/NAudio.Wasapi.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.Wasapi.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NAudio.WinMM/2.2.1": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.Win32.Registry": "4.7.0",
|
||||
"NAudio.Core": "2.2.1"
|
||||
},
|
||||
"compile": {
|
||||
"lib/netstandard2.0/NAudio.WinMM.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/NAudio.WinMM.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.AccessControl/4.7.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "3.1.0",
|
||||
"System.Security.Principal.Windows": "4.7.0"
|
||||
},
|
||||
"compile": {
|
||||
"ref/netstandard2.0/System.Security.AccessControl.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.Security.AccessControl.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll": {
|
||||
"assetType": "runtime",
|
||||
"rid": "win"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.Principal.Windows/4.7.0": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"ref/netcoreapp3.0/System.Security.Principal.Windows.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.Security.Principal.Windows.dll": {
|
||||
"related": ".xml"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
|
||||
"assetType": "runtime",
|
||||
"rid": "unix"
|
||||
},
|
||||
"runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
|
||||
"assetType": "runtime",
|
||||
"rid": "win"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"Microsoft.NETCore.Platforms/3.1.0": {
|
||||
"sha512": "z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==",
|
||||
"type": "package",
|
||||
"path": "microsoft.netcore.platforms/3.1.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"lib/netstandard1.0/_._",
|
||||
"microsoft.netcore.platforms.3.1.0.nupkg.sha512",
|
||||
"microsoft.netcore.platforms.nuspec",
|
||||
"runtime.json",
|
||||
"useSharedDesignerContext.txt",
|
||||
"version.txt"
|
||||
]
|
||||
},
|
||||
"Microsoft.Win32.Registry/4.7.0": {
|
||||
"sha512": "KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==",
|
||||
"type": "package",
|
||||
"path": "microsoft.win32.registry/4.7.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"lib/net46/Microsoft.Win32.Registry.dll",
|
||||
"lib/net461/Microsoft.Win32.Registry.dll",
|
||||
"lib/net461/Microsoft.Win32.Registry.xml",
|
||||
"lib/netstandard1.3/Microsoft.Win32.Registry.dll",
|
||||
"lib/netstandard2.0/Microsoft.Win32.Registry.dll",
|
||||
"lib/netstandard2.0/Microsoft.Win32.Registry.xml",
|
||||
"microsoft.win32.registry.4.7.0.nupkg.sha512",
|
||||
"microsoft.win32.registry.nuspec",
|
||||
"ref/net46/Microsoft.Win32.Registry.dll",
|
||||
"ref/net461/Microsoft.Win32.Registry.dll",
|
||||
"ref/net461/Microsoft.Win32.Registry.xml",
|
||||
"ref/net472/Microsoft.Win32.Registry.dll",
|
||||
"ref/net472/Microsoft.Win32.Registry.xml",
|
||||
"ref/netstandard1.3/Microsoft.Win32.Registry.dll",
|
||||
"ref/netstandard1.3/Microsoft.Win32.Registry.xml",
|
||||
"ref/netstandard1.3/de/Microsoft.Win32.Registry.xml",
|
||||
"ref/netstandard1.3/es/Microsoft.Win32.Registry.xml",
|
||||
"ref/netstandard1.3/fr/Microsoft.Win32.Registry.xml",
|
||||
"ref/netstandard1.3/it/Microsoft.Win32.Registry.xml",
|
||||
"ref/netstandard1.3/ja/Microsoft.Win32.Registry.xml",
|
||||
"ref/netstandard1.3/ko/Microsoft.Win32.Registry.xml",
|
||||
"ref/netstandard1.3/ru/Microsoft.Win32.Registry.xml",
|
||||
"ref/netstandard1.3/zh-hans/Microsoft.Win32.Registry.xml",
|
||||
"ref/netstandard1.3/zh-hant/Microsoft.Win32.Registry.xml",
|
||||
"ref/netstandard2.0/Microsoft.Win32.Registry.dll",
|
||||
"ref/netstandard2.0/Microsoft.Win32.Registry.xml",
|
||||
"runtimes/unix/lib/netstandard2.0/Microsoft.Win32.Registry.dll",
|
||||
"runtimes/unix/lib/netstandard2.0/Microsoft.Win32.Registry.xml",
|
||||
"runtimes/win/lib/net46/Microsoft.Win32.Registry.dll",
|
||||
"runtimes/win/lib/net461/Microsoft.Win32.Registry.dll",
|
||||
"runtimes/win/lib/net461/Microsoft.Win32.Registry.xml",
|
||||
"runtimes/win/lib/netstandard1.3/Microsoft.Win32.Registry.dll",
|
||||
"runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll",
|
||||
"runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.xml",
|
||||
"useSharedDesignerContext.txt",
|
||||
"version.txt"
|
||||
]
|
||||
},
|
||||
"NAudio/2.2.1": {
|
||||
"sha512": "c0DzwiyyklM0TP39Y7RObwO3QkWecgM6H60ikiEnsV/aEAJPbj5MFCLaD8BSfKuZe0HGuh9GRGWWlJmSxDc9MA==",
|
||||
"type": "package",
|
||||
"path": "naudio/2.2.1",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"lib/net472/NAudio.dll",
|
||||
"lib/net472/NAudio.xml",
|
||||
"lib/net6.0-windows7.0/NAudio.dll",
|
||||
"lib/net6.0-windows7.0/NAudio.xml",
|
||||
"lib/net6.0/NAudio.dll",
|
||||
"lib/net6.0/NAudio.xml",
|
||||
"lib/netcoreapp3.1/NAudio.dll",
|
||||
"lib/netcoreapp3.1/NAudio.xml",
|
||||
"license.txt",
|
||||
"naudio-icon.png",
|
||||
"naudio.2.2.1.nupkg.sha512",
|
||||
"naudio.nuspec"
|
||||
]
|
||||
},
|
||||
"NAudio.Asio/2.2.1": {
|
||||
"sha512": "hQglyOT5iT3XuGpBP8ZG0+aoqwRfidHjTNehpoWwX0g6KJEgtH2VaqM2nuJ2mheKZa/IBqB4YQTZVvrIapzfOA==",
|
||||
"type": "package",
|
||||
"path": "naudio.asio/2.2.1",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"lib/netstandard2.0/NAudio.Asio.dll",
|
||||
"lib/netstandard2.0/NAudio.Asio.xml",
|
||||
"naudio-icon.png",
|
||||
"naudio.asio.2.2.1.nupkg.sha512",
|
||||
"naudio.asio.nuspec"
|
||||
]
|
||||
},
|
||||
"NAudio.Core/2.2.1": {
|
||||
"sha512": "GgkdP6K/7FqXFo7uHvoqGZTJvW4z8g2IffhOO4JHaLzKCdDOUEzVKtveoZkCuUX8eV2HAINqi7VFqlFndrnz/g==",
|
||||
"type": "package",
|
||||
"path": "naudio.core/2.2.1",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"lib/netstandard2.0/NAudio.Core.dll",
|
||||
"lib/netstandard2.0/NAudio.Core.xml",
|
||||
"naudio-icon.png",
|
||||
"naudio.core.2.2.1.nupkg.sha512",
|
||||
"naudio.core.nuspec"
|
||||
]
|
||||
},
|
||||
"NAudio.Midi/2.2.1": {
|
||||
"sha512": "6r23ylGo5aeP02WFXsPquz0T0hFJWyh+7t++tz19tc3Kr38NHm+Z9j+FiAv+xkH8tZqXJqus9Q8p6u7bidIgbw==",
|
||||
"type": "package",
|
||||
"path": "naudio.midi/2.2.1",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"lib/netstandard2.0/NAudio.Midi.dll",
|
||||
"lib/netstandard2.0/NAudio.Midi.xml",
|
||||
"naudio-icon.png",
|
||||
"naudio.midi.2.2.1.nupkg.sha512",
|
||||
"naudio.midi.nuspec"
|
||||
]
|
||||
},
|
||||
"NAudio.Wasapi/2.2.1": {
|
||||
"sha512": "lFfXoqacZZe0WqNChJgGYI+XV/n/61LzPHT3C1CJp4khoxeo2sziyX5wzNYWeCMNbsWxFvT3b3iXeY1UYjBhZw==",
|
||||
"type": "package",
|
||||
"path": "naudio.wasapi/2.2.1",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"lib/netstandard2.0/NAudio.Wasapi.dll",
|
||||
"lib/netstandard2.0/NAudio.Wasapi.xml",
|
||||
"lib/uap10.0.18362/NAudio.Wasapi.dll",
|
||||
"lib/uap10.0.18362/NAudio.Wasapi.pri",
|
||||
"lib/uap10.0.18362/NAudio.Wasapi.xml",
|
||||
"naudio-icon.png",
|
||||
"naudio.wasapi.2.2.1.nupkg.sha512",
|
||||
"naudio.wasapi.nuspec"
|
||||
]
|
||||
},
|
||||
"NAudio.WinMM/2.2.1": {
|
||||
"sha512": "xFHRFwH4x6aq3IxRbewvO33ugJRvZFEOfO62i7uQJRUNW2cnu6BeBTHUS0JD5KBucZbHZaYqxQG8dwZ47ezQuQ==",
|
||||
"type": "package",
|
||||
"path": "naudio.winmm/2.2.1",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"lib/netstandard2.0/NAudio.WinMM.dll",
|
||||
"lib/netstandard2.0/NAudio.WinMM.xml",
|
||||
"naudio-icon.png",
|
||||
"naudio.winmm.2.2.1.nupkg.sha512",
|
||||
"naudio.winmm.nuspec"
|
||||
]
|
||||
},
|
||||
"System.Security.AccessControl/4.7.0": {
|
||||
"sha512": "JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==",
|
||||
"type": "package",
|
||||
"path": "system.security.accesscontrol/4.7.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"lib/net46/System.Security.AccessControl.dll",
|
||||
"lib/net461/System.Security.AccessControl.dll",
|
||||
"lib/net461/System.Security.AccessControl.xml",
|
||||
"lib/netstandard1.3/System.Security.AccessControl.dll",
|
||||
"lib/netstandard2.0/System.Security.AccessControl.dll",
|
||||
"lib/netstandard2.0/System.Security.AccessControl.xml",
|
||||
"lib/uap10.0.16299/_._",
|
||||
"ref/net46/System.Security.AccessControl.dll",
|
||||
"ref/net461/System.Security.AccessControl.dll",
|
||||
"ref/net461/System.Security.AccessControl.xml",
|
||||
"ref/netstandard1.3/System.Security.AccessControl.dll",
|
||||
"ref/netstandard1.3/System.Security.AccessControl.xml",
|
||||
"ref/netstandard1.3/de/System.Security.AccessControl.xml",
|
||||
"ref/netstandard1.3/es/System.Security.AccessControl.xml",
|
||||
"ref/netstandard1.3/fr/System.Security.AccessControl.xml",
|
||||
"ref/netstandard1.3/it/System.Security.AccessControl.xml",
|
||||
"ref/netstandard1.3/ja/System.Security.AccessControl.xml",
|
||||
"ref/netstandard1.3/ko/System.Security.AccessControl.xml",
|
||||
"ref/netstandard1.3/ru/System.Security.AccessControl.xml",
|
||||
"ref/netstandard1.3/zh-hans/System.Security.AccessControl.xml",
|
||||
"ref/netstandard1.3/zh-hant/System.Security.AccessControl.xml",
|
||||
"ref/netstandard2.0/System.Security.AccessControl.dll",
|
||||
"ref/netstandard2.0/System.Security.AccessControl.xml",
|
||||
"ref/uap10.0.16299/_._",
|
||||
"runtimes/win/lib/net46/System.Security.AccessControl.dll",
|
||||
"runtimes/win/lib/net461/System.Security.AccessControl.dll",
|
||||
"runtimes/win/lib/net461/System.Security.AccessControl.xml",
|
||||
"runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll",
|
||||
"runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.xml",
|
||||
"runtimes/win/lib/netstandard1.3/System.Security.AccessControl.dll",
|
||||
"runtimes/win/lib/uap10.0.16299/_._",
|
||||
"system.security.accesscontrol.4.7.0.nupkg.sha512",
|
||||
"system.security.accesscontrol.nuspec",
|
||||
"useSharedDesignerContext.txt",
|
||||
"version.txt"
|
||||
]
|
||||
},
|
||||
"System.Security.Principal.Windows/4.7.0": {
|
||||
"sha512": "ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==",
|
||||
"type": "package",
|
||||
"path": "system.security.principal.windows/4.7.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE.TXT",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"lib/net46/System.Security.Principal.Windows.dll",
|
||||
"lib/net461/System.Security.Principal.Windows.dll",
|
||||
"lib/net461/System.Security.Principal.Windows.xml",
|
||||
"lib/netstandard1.3/System.Security.Principal.Windows.dll",
|
||||
"lib/netstandard2.0/System.Security.Principal.Windows.dll",
|
||||
"lib/netstandard2.0/System.Security.Principal.Windows.xml",
|
||||
"lib/uap10.0.16299/_._",
|
||||
"ref/net46/System.Security.Principal.Windows.dll",
|
||||
"ref/net461/System.Security.Principal.Windows.dll",
|
||||
"ref/net461/System.Security.Principal.Windows.xml",
|
||||
"ref/netcoreapp3.0/System.Security.Principal.Windows.dll",
|
||||
"ref/netcoreapp3.0/System.Security.Principal.Windows.xml",
|
||||
"ref/netstandard1.3/System.Security.Principal.Windows.dll",
|
||||
"ref/netstandard1.3/System.Security.Principal.Windows.xml",
|
||||
"ref/netstandard1.3/de/System.Security.Principal.Windows.xml",
|
||||
"ref/netstandard1.3/es/System.Security.Principal.Windows.xml",
|
||||
"ref/netstandard1.3/fr/System.Security.Principal.Windows.xml",
|
||||
"ref/netstandard1.3/it/System.Security.Principal.Windows.xml",
|
||||
"ref/netstandard1.3/ja/System.Security.Principal.Windows.xml",
|
||||
"ref/netstandard1.3/ko/System.Security.Principal.Windows.xml",
|
||||
"ref/netstandard1.3/ru/System.Security.Principal.Windows.xml",
|
||||
"ref/netstandard1.3/zh-hans/System.Security.Principal.Windows.xml",
|
||||
"ref/netstandard1.3/zh-hant/System.Security.Principal.Windows.xml",
|
||||
"ref/netstandard2.0/System.Security.Principal.Windows.dll",
|
||||
"ref/netstandard2.0/System.Security.Principal.Windows.xml",
|
||||
"ref/uap10.0.16299/_._",
|
||||
"runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.dll",
|
||||
"runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.xml",
|
||||
"runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll",
|
||||
"runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.xml",
|
||||
"runtimes/win/lib/net46/System.Security.Principal.Windows.dll",
|
||||
"runtimes/win/lib/net461/System.Security.Principal.Windows.dll",
|
||||
"runtimes/win/lib/net461/System.Security.Principal.Windows.xml",
|
||||
"runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.dll",
|
||||
"runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.xml",
|
||||
"runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll",
|
||||
"runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.xml",
|
||||
"runtimes/win/lib/netstandard1.3/System.Security.Principal.Windows.dll",
|
||||
"runtimes/win/lib/uap10.0.16299/_._",
|
||||
"system.security.principal.windows.4.7.0.nupkg.sha512",
|
||||
"system.security.principal.windows.nuspec",
|
||||
"useSharedDesignerContext.txt",
|
||||
"version.txt"
|
||||
]
|
||||
}
|
||||
},
|
||||
"projectFileDependencyGroups": {
|
||||
"net8.0": [
|
||||
"NAudio >= 2.2.1"
|
||||
]
|
||||
},
|
||||
"packageFolders": {
|
||||
"C:\\Users\\Andrea Santaniello\\.nuget\\packages\\": {}
|
||||
},
|
||||
"project": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\FRNWebSocket.csproj",
|
||||
"projectName": "FRNWebSocket",
|
||||
"projectPath": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\FRNWebSocket.csproj",
|
||||
"packagesPath": "C:\\Users\\Andrea Santaniello\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\obj\\",
|
||||
"projectStyle": "PackageReference",
|
||||
"configFilePaths": [
|
||||
"C:\\Users\\Andrea Santaniello\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net8.0"
|
||||
],
|
||||
"sources": {
|
||||
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net8.0": {
|
||||
"targetAlias": "net8.0",
|
||||
"projectReferences": {}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "direct"
|
||||
}
|
||||
},
|
||||
"frameworks": {
|
||||
"net8.0": {
|
||||
"targetAlias": "net8.0",
|
||||
"dependencies": {
|
||||
"NAudio": {
|
||||
"target": "Package",
|
||||
"version": "[2.2.1, )"
|
||||
}
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48",
|
||||
"net481"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"frameworkReferences": {
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.400/PortableRuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
19
FRNWebSocket/obj/project.nuget.cache
Normal file
19
FRNWebSocket/obj/project.nuget.cache
Normal file
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "CNZlfOUrNLo=",
|
||||
"success": true,
|
||||
"projectFilePath": "C:\\Users\\Andrea Santaniello\\source\\repos\\sharpFRN\\FRNWebSocket\\FRNWebSocket.csproj",
|
||||
"expectedPackageFiles": [
|
||||
"C:\\Users\\Andrea Santaniello\\.nuget\\packages\\microsoft.netcore.platforms\\3.1.0\\microsoft.netcore.platforms.3.1.0.nupkg.sha512",
|
||||
"C:\\Users\\Andrea Santaniello\\.nuget\\packages\\microsoft.win32.registry\\4.7.0\\microsoft.win32.registry.4.7.0.nupkg.sha512",
|
||||
"C:\\Users\\Andrea Santaniello\\.nuget\\packages\\naudio\\2.2.1\\naudio.2.2.1.nupkg.sha512",
|
||||
"C:\\Users\\Andrea Santaniello\\.nuget\\packages\\naudio.asio\\2.2.1\\naudio.asio.2.2.1.nupkg.sha512",
|
||||
"C:\\Users\\Andrea Santaniello\\.nuget\\packages\\naudio.core\\2.2.1\\naudio.core.2.2.1.nupkg.sha512",
|
||||
"C:\\Users\\Andrea Santaniello\\.nuget\\packages\\naudio.midi\\2.2.1\\naudio.midi.2.2.1.nupkg.sha512",
|
||||
"C:\\Users\\Andrea Santaniello\\.nuget\\packages\\naudio.wasapi\\2.2.1\\naudio.wasapi.2.2.1.nupkg.sha512",
|
||||
"C:\\Users\\Andrea Santaniello\\.nuget\\packages\\naudio.winmm\\2.2.1\\naudio.winmm.2.2.1.nupkg.sha512",
|
||||
"C:\\Users\\Andrea Santaniello\\.nuget\\packages\\system.security.accesscontrol\\4.7.0\\system.security.accesscontrol.4.7.0.nupkg.sha512",
|
||||
"C:\\Users\\Andrea Santaniello\\.nuget\\packages\\system.security.principal.windows\\4.7.0\\system.security.principal.windows.4.7.0.nupkg.sha512"
|
||||
],
|
||||
"logs": []
|
||||
}
|
31
sharpFRN.sln
Normal file
31
sharpFRN.sln
Normal file
|
@ -0,0 +1,31 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.11.35312.102
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "sharpFRN", "sharpFRN\sharpFRN.csproj", "{14CC80EB-8543-4998-8923-1315110CDE6F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FRNWebSocket", "FRNWebSocket\FRNWebSocket.csproj", "{6E758F82-FE03-4F20-8428-3479B871E126}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{14CC80EB-8543-4998-8923-1315110CDE6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{14CC80EB-8543-4998-8923-1315110CDE6F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{14CC80EB-8543-4998-8923-1315110CDE6F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{14CC80EB-8543-4998-8923-1315110CDE6F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6E758F82-FE03-4F20-8428-3479B871E126}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6E758F82-FE03-4F20-8428-3479B871E126}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6E758F82-FE03-4F20-8428-3479B871E126}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6E758F82-FE03-4F20-8428-3479B871E126}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {F5CD8BC4-8328-41D0-9831-5382E5D3EBBC}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
675
sharpFRN/FRNClient.cs
Normal file
675
sharpFRN/FRNClient.cs
Normal file
|
@ -0,0 +1,675 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Monoculus
|
||||
{
|
||||
// Enums for different states
|
||||
public enum ClientState
|
||||
{
|
||||
None = 0x00,
|
||||
Connecting = 0x01,
|
||||
ProtoHandshake = 0x02,
|
||||
LoginPhase1 = 0x03,
|
||||
LoginPhase2 = 0x04,
|
||||
MessageHeader = 0x05,
|
||||
Message = 0x06,
|
||||
Tx = 0x07,
|
||||
Rx = 0x08,
|
||||
ClientsHeader = 0x09,
|
||||
Clients = 0x0A,
|
||||
NetworksHeader = 0x0B,
|
||||
Networks = 0x0C,
|
||||
SndFrameIn = 0x0D,
|
||||
KeepAlive = 0x0E,
|
||||
Disconnected = 0x0F,
|
||||
TxRequest = 0x10,
|
||||
TxWaiting = 0x11,
|
||||
TxApproved = 0x12,
|
||||
TxRejected = 0x13,
|
||||
TxComplete = 0x14,
|
||||
Ping = 0x15,
|
||||
BanlistHeader = 0x16,
|
||||
Banlist = 0x17,
|
||||
MutelistHeader = 0x18,
|
||||
Mutelist = 0x19,
|
||||
PttDown = 0x1A,
|
||||
PttUp = 0x1B,
|
||||
MessageInput = 0x1C,
|
||||
MessageSend = 0x1D,
|
||||
Abort = 0xFE,
|
||||
Idle = 0xFF
|
||||
}
|
||||
|
||||
// Constants for markers
|
||||
public static class Markers
|
||||
{
|
||||
public const byte KeepAlive = 0x00;
|
||||
public const byte TxApprove = 0x01;
|
||||
public const byte Sound = 0x02;
|
||||
public const byte Clients = 0x03;
|
||||
public const byte Message = 0x04;
|
||||
public const byte Networks = 0x05;
|
||||
public const byte Ban = 0x08;
|
||||
public const byte Mute = 0x09;
|
||||
// Additional markers based on documentation
|
||||
public const byte DT_IDLE = 0x00;
|
||||
public const byte DT_DO_TX = 0x01;
|
||||
public const byte DT_VOICE_BUFFER = 0x02;
|
||||
public const byte DT_CLIENT_LIST = 0x03;
|
||||
public const byte DT_TEXT_MESSAGE = 0x04;
|
||||
public const byte DT_NET_NAMES = 0x05;
|
||||
public const byte DT_ADMIN_LIST = 0x06;
|
||||
public const byte DT_ACCESS_LIST = 0x07;
|
||||
public const byte DT_BLOCK_LIST = 0x08;
|
||||
public const byte DT_MUTE_LIST = 0x09;
|
||||
public const byte DT_ACCESS_MODE = 0x0A;
|
||||
}
|
||||
|
||||
// Other constants
|
||||
public static class Constants
|
||||
{
|
||||
public const int KeepAliveTimeout = 1;
|
||||
public const int FRNProtocolVersion = 2022001;
|
||||
|
||||
public const string FRNTypePCOnly = "PC Only";
|
||||
public const string FRNTypeCrosslink = "Crosslink";
|
||||
public const string FRNTypeParrot = "Parrot";
|
||||
|
||||
public const string FRNMessageBroadcast = "A";
|
||||
public const string FRNMessagePrivate = "P";
|
||||
|
||||
public const int FRNStatusOnline = 0;
|
||||
public const int FRNStatusAway = 1;
|
||||
public const int FRNStatusNA = 2;
|
||||
|
||||
public const int FRNMuteOff = 0;
|
||||
public const int FRNMuteOn = 1;
|
||||
|
||||
public const string FRNResultOK = "OK";
|
||||
public const string FRNResultNOK = "NOK";
|
||||
public const string FRNResultWrong = "WRONG";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a Free Radio Network client.
|
||||
/// </summary>
|
||||
public class FRNClient
|
||||
{
|
||||
private TcpClient _tcpClient;
|
||||
private NetworkStream _networkStream;
|
||||
private readonly string _host;
|
||||
private readonly int _port;
|
||||
private ClientState _state;
|
||||
private readonly CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();
|
||||
|
||||
// Client parameters
|
||||
private readonly string _callSign;
|
||||
private readonly string _name;
|
||||
private readonly string _email;
|
||||
private readonly string _password;
|
||||
private readonly string _network;
|
||||
private readonly string _country;
|
||||
private readonly string _city;
|
||||
private readonly string _locator;
|
||||
private readonly string _type;
|
||||
private readonly string _description;
|
||||
|
||||
// Buffers
|
||||
private readonly List<byte> _inputBuffer = new List<byte>();
|
||||
private readonly StringBuilder _outputBuffer = new StringBuilder();
|
||||
|
||||
// Last KeepAlive timestamp
|
||||
private DateTime _lastKeepAlive;
|
||||
|
||||
// Event handlers (callbacks)
|
||||
public event Action OnConnect;
|
||||
public event Action OnDisconnect;
|
||||
public event Action OnLogin;
|
||||
public event Action<string> OnMessageReceived;
|
||||
public event Action<byte[], int> OnVoiceDataReceived;
|
||||
public event Action<List<ClientInfo>> OnClientListReceived;
|
||||
|
||||
// Additional properties and flags
|
||||
private bool _isConnected;
|
||||
|
||||
// Variables to track voice data collection
|
||||
private bool _isReceivingVoiceData = false;
|
||||
private MemoryStream _voiceDataStream = new MemoryStream();
|
||||
private int _currentActiveClientIndex = -1;
|
||||
private readonly object _voiceDataLock = new object();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the FRNClient class.
|
||||
/// </summary>
|
||||
public FRNClient(string host, int port, string callSign, string name, string email, string password, string network, string country, string city, string locator, string type, string description)
|
||||
{
|
||||
_host = host;
|
||||
_port = port;
|
||||
_callSign = callSign;
|
||||
_name = name;
|
||||
_email = email;
|
||||
_password = password;
|
||||
_network = network;
|
||||
_country = country ?? "N/A";
|
||||
_city = city ?? "N/A";
|
||||
_locator = locator ?? "N/A";
|
||||
_type = type ?? Constants.FRNTypePCOnly;
|
||||
_description = description ?? string.Empty;
|
||||
_state = ClientState.None;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Starts the client and connects to the server.
|
||||
/// </summary>
|
||||
public async Task RunAsync()
|
||||
{
|
||||
await ConnectAsync();
|
||||
|
||||
if (_isConnected)
|
||||
{
|
||||
await ProcessAsync(_cancellationTokenSource.Token);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Connects to the FRN server.
|
||||
/// </summary>
|
||||
private async Task ConnectAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
_tcpClient = new TcpClient();
|
||||
await _tcpClient.ConnectAsync(_host, _port);
|
||||
_networkStream = _tcpClient.GetStream();
|
||||
_state = ClientState.Connecting;
|
||||
_isConnected = true;
|
||||
|
||||
OnConnect?.Invoke();
|
||||
#if DEBUG
|
||||
Console.WriteLine("Connected to server.");
|
||||
#endif
|
||||
// Start the login process
|
||||
await SendLoginAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Connection failed: {ex.Message}");
|
||||
_isConnected = false;
|
||||
_state = ClientState.Disconnected;
|
||||
|
||||
OnDisconnect?.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Processes incoming and outgoing data.
|
||||
/// </summary>
|
||||
private async Task ProcessAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
try
|
||||
{
|
||||
var readTask = ReadAsync(cancellationToken);
|
||||
var writeTask = WriteAsync(cancellationToken);
|
||||
var keepAliveTask = KeepAliveAsync(cancellationToken);
|
||||
|
||||
await Task.WhenAll(readTask, writeTask, keepAliveTask);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Processing error: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads data from the network stream.
|
||||
/// </summary>
|
||||
private async Task ReadAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
var buffer = new byte[8192];
|
||||
|
||||
while (_isConnected && !cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
if (_networkStream.DataAvailable)
|
||||
{
|
||||
int bytesRead = await _networkStream.ReadAsync(buffer, 0, buffer.Length, cancellationToken);
|
||||
if (bytesRead == 0)
|
||||
{
|
||||
// Connection closed
|
||||
_isConnected = false;
|
||||
_state = ClientState.Disconnected;
|
||||
|
||||
OnDisconnect?.Invoke();
|
||||
#if DEBUG
|
||||
Console.WriteLine("Disconnected from server.");
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
// Process incoming data
|
||||
byte[] dataReceived = new byte[bytesRead];
|
||||
Array.Copy(buffer, dataReceived, bytesRead);
|
||||
#if DEBUG
|
||||
Console.WriteLine($"Received raw data ({bytesRead} bytes): {BitConverter.ToString(dataReceived)}");
|
||||
#endif
|
||||
_inputBuffer.AddRange(dataReceived);
|
||||
ParseIncomingData();
|
||||
}
|
||||
else
|
||||
{
|
||||
await Task.Delay(100, cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses incoming data from the server.
|
||||
/// </summary>
|
||||
private void ParseIncomingData()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
if (_inputBuffer.Count < 1)
|
||||
{
|
||||
// Not enough data
|
||||
break;
|
||||
}
|
||||
|
||||
if (_state == ClientState.LoginPhase1)
|
||||
{
|
||||
// We're expecting a login response
|
||||
int newlineIndex = _inputBuffer.LastIndexOf((byte)'\r');
|
||||
if (newlineIndex != -1)
|
||||
{
|
||||
byte[] lineBytes = _inputBuffer.GetRange(0, newlineIndex + 1).ToArray();
|
||||
_inputBuffer.RemoveRange(0, newlineIndex + 1);
|
||||
string response = Encoding.ASCII.GetString(lineBytes).Trim();
|
||||
|
||||
HandleLoginPhase1(response);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Wait for more data
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
byte dataType = _inputBuffer[0];
|
||||
|
||||
switch (dataType)
|
||||
{
|
||||
case Markers.DT_IDLE:
|
||||
_inputBuffer.RemoveAt(0); // Remove DataType byte
|
||||
HandleIdleState();
|
||||
break;
|
||||
case Markers.DT_DO_TX:
|
||||
if (_inputBuffer.Count >= 1 + 2)
|
||||
{
|
||||
_inputBuffer.RemoveAt(0); // Remove DataType byte
|
||||
HandleDoTx();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Not enough data
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case Markers.DT_VOICE_BUFFER:
|
||||
if (_inputBuffer.Count >= 1 + 2 + 325)
|
||||
{
|
||||
_inputBuffer.RemoveAt(0); // Remove DataType byte
|
||||
HandleVoiceBuffer();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Not enough data
|
||||
return;
|
||||
}
|
||||
break;
|
||||
// Handle other data types similarly
|
||||
default:
|
||||
Console.WriteLine($"Unknown data type received: {dataType}");
|
||||
_inputBuffer.RemoveAt(0); // Remove unknown DataType byte
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles the 'DT_VOICE_BUFFER' data type.
|
||||
/// </summary>
|
||||
private void HandleVoiceBuffer()
|
||||
{
|
||||
if (_inputBuffer.Count >= 2 + 325)
|
||||
{
|
||||
ushort clientIndex = (ushort)((_inputBuffer[0] << 8) | _inputBuffer[1]);
|
||||
_inputBuffer.RemoveRange(0, 2);
|
||||
|
||||
byte[] voiceData = _inputBuffer.GetRange(0, 325).ToArray();
|
||||
_inputBuffer.RemoveRange(0, 325);
|
||||
#if DEBUG
|
||||
Console.WriteLine($"Received voice data from client index: {clientIndex}");
|
||||
#endif
|
||||
// Invoke the event handler to process the voice data
|
||||
OnVoiceDataReceived?.Invoke(voiceData, clientIndex);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Not enough data
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles the 'DT_DO_TX' data type.
|
||||
/// </summary>
|
||||
private void HandleDoTx()
|
||||
{
|
||||
if (_inputBuffer.Count >= 2)
|
||||
{
|
||||
ushort clientIndex = (ushort)((_inputBuffer[0] << 8) | _inputBuffer[1]);
|
||||
_inputBuffer.RemoveRange(0, 2);
|
||||
Console.WriteLine($"Server indicates you may start sending voice data. Active client index: {clientIndex}");
|
||||
// Implement logic to start transmitting voice data
|
||||
}
|
||||
else
|
||||
{
|
||||
// Wait for more data
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles the 'DT_IDLE' data type.
|
||||
/// </summary>
|
||||
private void HandleIdleState()
|
||||
{
|
||||
#if DEBUG
|
||||
Console.WriteLine("Server is idle. No new data.");
|
||||
#endif
|
||||
|
||||
lock (_voiceDataLock)
|
||||
{
|
||||
if (_isReceivingVoiceData)
|
||||
{
|
||||
// Transmission ended
|
||||
_isReceivingVoiceData = false;
|
||||
|
||||
// Reset active client index
|
||||
_currentActiveClientIndex = -1;
|
||||
_voiceDataStream.SetLength(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses incoming data for login response.
|
||||
/// </summary>
|
||||
private void HandleLoginPhase1(string response)
|
||||
{
|
||||
// Extract the server version number
|
||||
int index = 0;
|
||||
while (index < response.Length && char.IsDigit(response[index]))
|
||||
{
|
||||
index++;
|
||||
}
|
||||
|
||||
string versionString = response.Substring(0, index);
|
||||
string xmlData = response.Substring(index);
|
||||
#if DEBUG
|
||||
Console.WriteLine($"Server version: {versionString}");
|
||||
#endif
|
||||
// Parse the XML-like data
|
||||
var xmlTags = new Dictionary<string, string>();
|
||||
|
||||
int pos = 0;
|
||||
while (pos < xmlData.Length)
|
||||
{
|
||||
if (xmlData[pos] == '<')
|
||||
{
|
||||
int tagStart = pos + 1;
|
||||
int tagEnd = xmlData.IndexOf('>', tagStart);
|
||||
if (tagEnd == -1)
|
||||
break; // incomplete tag
|
||||
|
||||
string tagName = xmlData.Substring(tagStart, tagEnd - tagStart);
|
||||
|
||||
int closingTagStart = xmlData.IndexOf($"</{tagName}>", tagEnd + 1);
|
||||
if (closingTagStart == -1)
|
||||
{
|
||||
// Some tags might be self-closing or empty; adjust as needed
|
||||
closingTagStart = tagEnd;
|
||||
// break; // incomplete data
|
||||
}
|
||||
|
||||
string tagValue = xmlData.Substring(tagEnd + 1, closingTagStart - tagEnd - 1);
|
||||
|
||||
xmlTags[tagName] = tagValue;
|
||||
|
||||
pos = closingTagStart + tagName.Length + 3; // Move past the closing tag
|
||||
}
|
||||
else
|
||||
{
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
|
||||
// Process the extracted tags
|
||||
if (xmlTags.TryGetValue("AL", out string accessLevel))
|
||||
{
|
||||
Console.WriteLine($"Access Level: {accessLevel}");
|
||||
|
||||
if (accessLevel == "OK" || accessLevel == "OWNER" || accessLevel == "NETOWNER" || accessLevel == "ADMIN")
|
||||
{
|
||||
_state = ClientState.LoginPhase2;
|
||||
OnLogin?.Invoke();
|
||||
#if DEBUG
|
||||
Console.WriteLine("Login successful.");
|
||||
#endif
|
||||
_state = ClientState.Idle;
|
||||
|
||||
// Send 'RX0' to server as per documentation
|
||||
SendAsync("RX0\r\n").Wait();
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Login failed or access blocked.");
|
||||
_state = ClientState.Abort;
|
||||
_isConnected = false;
|
||||
OnDisconnect?.Invoke();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Failed to parse access level.");
|
||||
_state = ClientState.Abort;
|
||||
_isConnected = false;
|
||||
OnDisconnect?.Invoke();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes data to the network stream.
|
||||
/// </summary>
|
||||
private async Task WriteAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
while (_isConnected && !cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
if (_outputBuffer.Length > 0)
|
||||
{
|
||||
string dataToSend;
|
||||
lock (_outputBuffer)
|
||||
{
|
||||
dataToSend = _outputBuffer.ToString();
|
||||
_outputBuffer.Clear();
|
||||
}
|
||||
|
||||
byte[] data = Encoding.ASCII.GetBytes(dataToSend);
|
||||
#if DEBUG
|
||||
Console.WriteLine($"Sending raw data ({data.Length} bytes): {BitConverter.ToString(data)}");
|
||||
#endif
|
||||
await _networkStream.WriteAsync(data, 0, data.Length, cancellationToken);
|
||||
await _networkStream.FlushAsync(cancellationToken);
|
||||
}
|
||||
else
|
||||
{
|
||||
await Task.Delay(100, cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Sends periodic keep-alive messages to the server.
|
||||
/// </summary>
|
||||
private async Task KeepAliveAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
while (_isConnected && !cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
if ((DateTime.Now - _lastKeepAlive).TotalSeconds > Constants.KeepAliveTimeout)
|
||||
{
|
||||
await SendKeepAliveAsync();
|
||||
}
|
||||
|
||||
await Task.Delay(500, cancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends the initial login message to the server.
|
||||
/// </summary>
|
||||
private async Task SendLoginAsync()
|
||||
{
|
||||
string loginMessage = BuildLoginMessage();
|
||||
await SendAsync(loginMessage);
|
||||
|
||||
_state = ClientState.LoginPhase1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Builds the login message.
|
||||
/// </summary>
|
||||
private string BuildLoginMessage()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.Append("CT:");
|
||||
sb.Append($"<VX>{Constants.FRNProtocolVersion}</VX>");
|
||||
sb.Append($"<EA>{_email}</EA>");
|
||||
sb.Append($"<PW>{_password}</PW>");
|
||||
sb.Append($"<ON>{_callSign}</ON>");
|
||||
sb.Append($"<CL>0</CL>");
|
||||
sb.Append($"<BC>{_type}</BC>"); // Adjusted as per documentation
|
||||
sb.Append($"<DS>{_description}</DS>");
|
||||
sb.Append($"<NN>{_country}</NN>");
|
||||
sb.Append($"<CT>{_city} - {_locator}</CT>");
|
||||
sb.Append($"<NT>{_network}</NT>");
|
||||
sb.Append("\r\n");
|
||||
#if DEBUG
|
||||
Console.WriteLine($"Built login message: {sb}");
|
||||
#endif
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends a keep-alive message to the server.
|
||||
/// </summary>
|
||||
private async Task SendKeepAliveAsync()
|
||||
{
|
||||
await SendAsync("P\r\n");
|
||||
_lastKeepAlive = DateTime.Now;
|
||||
#if DEBUG
|
||||
Console.WriteLine("Sent keep-alive to server.");
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends data to the server.
|
||||
/// </summary>
|
||||
private async Task SendAsync(string data)
|
||||
{
|
||||
lock (_outputBuffer)
|
||||
{
|
||||
_outputBuffer.Append(data);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Disconnects the client.
|
||||
/// </summary>
|
||||
public void Disconnect()
|
||||
{
|
||||
_isConnected = false;
|
||||
_cancellationTokenSource.Cancel();
|
||||
_networkStream?.Close();
|
||||
_tcpClient?.Close();
|
||||
_state = ClientState.Disconnected;
|
||||
|
||||
OnDisconnect?.Invoke();
|
||||
Console.WriteLine("Client disconnected.");
|
||||
}
|
||||
|
||||
// Other methods to handle sending messages, changing status, etc.
|
||||
|
||||
/// <summary>
|
||||
/// Sends a text message to the server.
|
||||
/// </summary>
|
||||
public async Task SendMessageAsync(string recipientId, string message)
|
||||
{
|
||||
string messageToSend = $"TM:<ID>{recipientId}</ID><MS>{message}</MS>\r\n";
|
||||
await SendAsync(messageToSend);
|
||||
Console.WriteLine($"Sent message to {recipientId}: {message}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends a status update to the server.
|
||||
/// </summary>
|
||||
public async Task SendStatusAsync(int status)
|
||||
{
|
||||
string statusMessage = $"ST:{status}\r\n";
|
||||
await SendAsync(statusMessage);
|
||||
Console.WriteLine($"Sent status update: {status}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Requests to start transmitting voice data.
|
||||
/// </summary>
|
||||
public async Task RequestTransmitAsync()
|
||||
{
|
||||
await SendAsync("TX0\r\n");
|
||||
Console.WriteLine("Requested to start transmitting voice data.");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents client information received from the server.
|
||||
/// </summary>
|
||||
public class ClientInfo
|
||||
{
|
||||
public string Status { get; set; }
|
||||
public string Muted { get; set; }
|
||||
public string Country { get; set; }
|
||||
public string City { get; set; }
|
||||
public string BandAndChannel { get; set; }
|
||||
public string ClientType { get; set; }
|
||||
public string CallsignAndUser { get; set; }
|
||||
public string ID { get; set; }
|
||||
public string Description { get; set; }
|
||||
}
|
||||
|
||||
// Extension method to find index of a byte in a List<byte>
|
||||
public static class Extensions
|
||||
{
|
||||
public static int IndexOf(this List<byte> buffer, byte value)
|
||||
{
|
||||
for (int i = 0; i < buffer.Count; i++)
|
||||
{
|
||||
if (buffer[i] == value)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
26
sharpFRN/Properties/Settings.Designer.cs
generated
Normal file
26
sharpFRN/Properties/Settings.Designer.cs
generated
Normal file
|
@ -0,0 +1,26 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Il codice è stato generato da uno strumento.
|
||||
// Versione runtime:4.0.30319.42000
|
||||
//
|
||||
// Le modifiche apportate a questo file possono provocare un comportamento non corretto e andranno perse se
|
||||
// il codice viene rigenerato.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace sharpFRN.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.11.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
|
||||
public static Settings Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
6
sharpFRN/Properties/Settings.settings
Normal file
6
sharpFRN/Properties/Settings.settings
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
</SettingsFile>
|
8
sharpFRN/Properties/launchSettings.json
Normal file
8
sharpFRN/Properties/launchSettings.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"profiles": {
|
||||
"sharpFRN": {
|
||||
"commandName": "Project",
|
||||
"nativeDebugging": true
|
||||
}
|
||||
}
|
||||
}
|
BIN
sharpFRN/bin/Debug/net8.0-windows/NAudio.Asio.dll
Normal file
BIN
sharpFRN/bin/Debug/net8.0-windows/NAudio.Asio.dll
Normal file
Binary file not shown.
BIN
sharpFRN/bin/Debug/net8.0-windows/NAudio.Core.dll
Normal file
BIN
sharpFRN/bin/Debug/net8.0-windows/NAudio.Core.dll
Normal file
Binary file not shown.
BIN
sharpFRN/bin/Debug/net8.0-windows/NAudio.Midi.dll
Normal file
BIN
sharpFRN/bin/Debug/net8.0-windows/NAudio.Midi.dll
Normal file
Binary file not shown.
BIN
sharpFRN/bin/Debug/net8.0-windows/NAudio.Wasapi.dll
Normal file
BIN
sharpFRN/bin/Debug/net8.0-windows/NAudio.Wasapi.dll
Normal file
Binary file not shown.
BIN
sharpFRN/bin/Debug/net8.0-windows/NAudio.WinForms.dll
Normal file
BIN
sharpFRN/bin/Debug/net8.0-windows/NAudio.WinForms.dll
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user