mirror of
https://github.com/ZetaKebab/MpcNET.git
synced 2025-01-14 22:18:43 +00:00
commit
ec24b3f01a
12
.gitignore
vendored
12
.gitignore
vendored
@ -3,7 +3,15 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
/.vs
|
/.vs
|
||||||
|
|
||||||
|
/LibMpc/bin
|
||||||
|
/LibMpc/obj
|
||||||
/LibMpc/LibMpc.xproj.user
|
/LibMpc/LibMpc.xproj.user
|
||||||
/LibMpc/obj/Debug/netstandard1.6
|
|
||||||
/LibMpc/bin/Debug/netstandard1.6
|
|
||||||
/LibMpc/project.lock.json
|
/LibMpc/project.lock.json
|
||||||
|
|
||||||
|
/LibMpcApp/bin
|
||||||
|
/LibMpcApp/obj
|
||||||
|
/LibMpcApp/LibMpcApp.xproj.user
|
||||||
|
/LibMpcApp/project.lock.json
|
||||||
|
|
||||||
|
/LibMpc.sln.DotSettings.user
|
||||||
|
50
LibMpc.sln
50
LibMpc.sln
@ -1,22 +1,28 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 14
|
# Visual Studio 14
|
||||||
VisualStudioVersion = 14.0.25420.1
|
VisualStudioVersion = 14.0.25420.1
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "LibMpc", "LibMpc\LibMpc.xproj", "{8994C820-7BA9-4BB8-B9EA-C608B07C4A11}"
|
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "LibMpc", "LibMpc\LibMpc.xproj", "{8994C820-7BA9-4BB8-B9EA-C608B07C4A11}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "LibMpcApp", "LibMpcApp\LibMpcApp.xproj", "{FF176AD5-D6DA-41EE-B27D-1DBEF0CE462F}"
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
EndProject
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Global
|
||||||
Release|Any CPU = Release|Any CPU
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
EndGlobalSection
|
Debug|Any CPU = Debug|Any CPU
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
Release|Any CPU = Release|Any CPU
|
||||||
{8994C820-7BA9-4BB8-B9EA-C608B07C4A11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
EndGlobalSection
|
||||||
{8994C820-7BA9-4BB8-B9EA-C608B07C4A11}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{8994C820-7BA9-4BB8-B9EA-C608B07C4A11}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{8994C820-7BA9-4BB8-B9EA-C608B07C4A11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{8994C820-7BA9-4BB8-B9EA-C608B07C4A11}.Release|Any CPU.Build.0 = Release|Any CPU
|
{8994C820-7BA9-4BB8-B9EA-C608B07C4A11}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
EndGlobalSection
|
{8994C820-7BA9-4BB8-B9EA-C608B07C4A11}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
{8994C820-7BA9-4BB8-B9EA-C608B07C4A11}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
HideSolutionNode = FALSE
|
{FF176AD5-D6DA-41EE-B27D-1DBEF0CE462F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
EndGlobalSection
|
{FF176AD5-D6DA-41EE-B27D-1DBEF0CE462F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
EndGlobal
|
{FF176AD5-D6DA-41EE-B27D-1DBEF0CE462F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{FF176AD5-D6DA-41EE-B27D-1DBEF0CE462F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
|
@ -39,6 +39,29 @@ namespace LibMpc
|
|||||||
return _connection.IsConnected;
|
return _connection.IsConnected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task DisconnectAsync()
|
||||||
|
{
|
||||||
|
if (_connection == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_connection.IsConnected)
|
||||||
|
{
|
||||||
|
await _connection?.DisconnectAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: create response type
|
||||||
|
public async Task<object> SendAsync(IMpcCommand command)
|
||||||
|
{
|
||||||
|
var mpdResponse = await _connection.Exec(command.Value);
|
||||||
|
var respose = command.ParseResponse(mpdResponse);
|
||||||
|
|
||||||
|
return respose;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#region Admin Commands
|
#region Admin Commands
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Disables an MPD output.
|
/// Disables an MPD output.
|
||||||
|
@ -63,7 +63,7 @@ namespace LibMpc
|
|||||||
var firstLine = _reader.ReadLine();
|
var firstLine = _reader.ReadLine();
|
||||||
if (!firstLine.StartsWith(FIRST_LINE_PREFIX))
|
if (!firstLine.StartsWith(FIRST_LINE_PREFIX))
|
||||||
{
|
{
|
||||||
await Disconnect();
|
await DisconnectAsync();
|
||||||
throw new InvalidDataException("Response of mpd does not start with \"" + FIRST_LINE_PREFIX + "\"." );
|
throw new InvalidDataException("Response of mpd does not start with \"" + FIRST_LINE_PREFIX + "\"." );
|
||||||
}
|
}
|
||||||
_version = firstLine.Substring(FIRST_LINE_PREFIX.Length);
|
_version = firstLine.Substring(FIRST_LINE_PREFIX.Length);
|
||||||
@ -74,7 +74,7 @@ namespace LibMpc
|
|||||||
await ReadResponseAsync();
|
await ReadResponseAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task Disconnect()
|
public Task DisconnectAsync()
|
||||||
{
|
{
|
||||||
if (_tcpClient == null)
|
if (_tcpClient == null)
|
||||||
{
|
{
|
||||||
@ -113,7 +113,7 @@ namespace LibMpc
|
|||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
try { await Disconnect(); } catch (Exception) { }
|
try { await DisconnectAsync(); } catch (Exception) { }
|
||||||
return null; // TODO: Create Null Object for MpdResponse
|
return null; // TODO: Create Null Object for MpdResponse
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -161,7 +161,7 @@ namespace LibMpc
|
|||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
try { await Disconnect(); } catch (Exception) { }
|
try { await DisconnectAsync(); } catch (Exception) { }
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
21
LibMpcApp/LibMpcApp.xproj
Normal file
21
LibMpcApp/LibMpcApp.xproj
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
|
||||||
|
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>ff176ad5-d6da-41ee-b27d-1dbef0ce462f</ProjectGuid>
|
||||||
|
<RootNamespace>LibMpcApp</RootNamespace>
|
||||||
|
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
|
||||||
|
<OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
|
||||||
|
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
|
||||||
|
</Project>
|
65
LibMpcApp/Program.cs
Normal file
65
LibMpcApp/Program.cs
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
using System;
|
||||||
|
using System.Net;
|
||||||
|
using LibMpc;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace LibMpcApp
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Simple console app to test commands and parsed responses.
|
||||||
|
/// </summary>
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
private static readonly Dictionary<int, Func<object, IMpcCommand>> _commands = new Dictionary<int, Func<object, IMpcCommand>>
|
||||||
|
{
|
||||||
|
{ 1, input => new Commands.Reflection.TagTypes() }
|
||||||
|
};
|
||||||
|
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var mpc = new Mpc(new IPEndPoint(IPAddress.Loopback, 6600));
|
||||||
|
|
||||||
|
var connected = mpc.ConnectAsync().GetAwaiter().GetResult();
|
||||||
|
if (connected)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Connected to MPD.");
|
||||||
|
StartReadCommands(mpc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Could not connect to MPD.");
|
||||||
|
}
|
||||||
|
|
||||||
|
mpc.DisconnectAsync().GetAwaiter().GetResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void StartReadCommands(Mpc mpc)
|
||||||
|
{
|
||||||
|
int userInput = 0;
|
||||||
|
while ((userInput = DisplayMenu()) != 99)
|
||||||
|
{
|
||||||
|
Func<object, IMpcCommand> command;
|
||||||
|
var response = new object();
|
||||||
|
|
||||||
|
if (_commands.TryGetValue(userInput, out command))
|
||||||
|
{
|
||||||
|
response = mpc.SendAsync(command(null)).GetAwaiter().GetResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine("Response: ");
|
||||||
|
Console.WriteLine(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static public int DisplayMenu()
|
||||||
|
{
|
||||||
|
Console.WriteLine();
|
||||||
|
Console.WriteLine("Commands: ");
|
||||||
|
Console.WriteLine("1. tagtypes");
|
||||||
|
Console.WriteLine("99. Exit");
|
||||||
|
Console.WriteLine();
|
||||||
|
var result = Console.ReadLine();
|
||||||
|
return Convert.ToInt32(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
19
LibMpcApp/Properties/AssemblyInfo.cs
Normal file
19
LibMpcApp/Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("Windows User")]
|
||||||
|
[assembly: AssemblyProduct("LibMpcApp")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("ff176ad5-d6da-41ee-b27d-1dbef0ce462f")]
|
20
LibMpcApp/project.json
Normal file
20
LibMpcApp/project.json
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"version": "1.0.0-*",
|
||||||
|
"buildOptions": {
|
||||||
|
"emitEntryPoint": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"dependencies": {
|
||||||
|
"LibMpc": "1.0.0-*",
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"type": "platform",
|
||||||
|
"version": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp1.0": {
|
||||||
|
"imports": "dnxcore50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user