Skip to content

Commit

Permalink
Bug fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
opengd committed Jul 29, 2015
1 parent c728cd4 commit 3e12778
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 61 deletions.
36 changes: 22 additions & 14 deletions Chimney.MPD/ChimneyMPDBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ protected void NotifyPropertyChanged([CallerMemberName] String propertyName = ""
public delegate void EventHandler(object sender, EventArgs e);
public event EventHandler ConnectionProblem;
public event EventHandler ConnectionConnected;
public event EventHandler CouldNotConnect;

private Chimney.MPD.Net.Connection _connection;

Expand Down Expand Up @@ -201,24 +202,29 @@ public async Task<List<string>> Idle(string subsystems = "")

public async Task NoIdle()
{
await Send(MPDKeyWords.Send.Encode( MPDKeyWords.Client.Status.NOIDLE ), false, true, false);
this.idle = false;
await Connection.Send(_connection.Socket,
MPDKeyWords.Send.Encode(MPDKeyWords.Client.Status.NOIDLE));
//await Send(MPDKeyWords.Send.Encode( MPDKeyWords.Client.Status.NOIDLE ), false, true, false);

idle = false;
}

public async Task<bool> Close(bool connectionproblem = false, bool silent = true)
public async Task<bool> Close(bool connectionproblem = false)
{
Debug.WriteLine(this.name + " : CLOSE");
Debug.WriteLine(name + " : CLOSE");

this.queueInUse = this.idle = this.runQue = false;
queueInUse = idle = runQue = false;

this.sendQueue.Clear();
this.responseDictionary.Clear();
sendQueue.Clear();
responseDictionary.Clear();

this.connectionproblem = connectionproblem;

if (this._connection != null && !this.connectionproblem)
await Send( MPDKeyWords.Send.Encode( MPDKeyWords.Client.Connection.CLOSE), false, true, false);

if (_connection != null && !this.connectionproblem)
//await Send( MPDKeyWords.Send.Encode( MPDKeyWords.Client.Connection.CLOSE), false, true, false);
await Connection.Send(_connection.Socket,
MPDKeyWords.Send.Encode(MPDKeyWords.Client.Connection.CLOSE));

Connected = Connecting = false;

return true;
Expand All @@ -241,9 +247,9 @@ public virtual async Task<bool> RefreshConnection()
return suc;
}

public async Task<bool> Disconnect(bool silent = false)
public async Task<bool> Disconnect()
{
return await Close(false, silent);
return await Close(false);
}

//
Expand Down Expand Up @@ -306,14 +312,16 @@ public async Task<bool> Connect(string host, string port, string password = null
}

Debug.WriteLine(this.name + " : NEW CONNECTION : PERMISSION : " + success);

}

if (!success)
{
Connected = false;
Connecting = false;
_connection.Close();

if (CouldNotConnect != null)
CouldNotConnect(this, new EventArgs());
}
else if (success && !silent)
{
Expand Down Expand Up @@ -393,7 +401,7 @@ private async Task RunQueue()
if ((!suc || !readsuc) && attemps > 0 && queueJob.wait)
{
Debug.WriteLine(this.name + " : RECONNECT");
await Connect(this.host, this.port, this.password);
await Connect(this.host, this.port, this.password, true);
suc = false;
//attemps--;

Expand Down
8 changes: 4 additions & 4 deletions Chimney.MPD/ChimneyMPDEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,6 @@ public MessageEventArgs(List<Message> messages)

public class ChimneyMPDEvent : ChimneyMPDClient
{
public delegate void EventHandler(object sender, EventArgs e);
public delegate void PlaylistEventHandler(object sender, PlaylistEventArgs e);
public delegate void StatusEventHandler(object sender, StatusEventArgs e);
public delegate void PlayerEventHandler(object sender, PlayerEventArgs e);
Expand Down Expand Up @@ -134,8 +133,9 @@ public class ChimneyMPDEvent : ChimneyMPDClient

public async Task<bool> RefreshConnection(Status status = null)
{
idle = false;
bool suc = await Start(status, true);
//idle = false;
await Stop();
bool suc = await Start(status, false);
return suc;
}

Expand Down Expand Up @@ -257,7 +257,7 @@ private async Task IdleEventLoop()
}
else if (attemps > 0 && idle)
{
await Connect(this.host, this.port, this.password, true);
await Connect(this.host, this.port, this.password, false);
attemps--;
}
else if(idle)
Expand Down
101 changes: 58 additions & 43 deletions Chimney.MPD/Net/Connection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,49 +89,57 @@ public async Task<bool> Connect(string host, string port, int timeout = 0)
public static async Task<string> Recive(StreamSocket streamSocket, List<string> orstarts, List<string> orends, List<string> andstarts, List<string> andends)
{
string returnString = string.Empty;

using (var dataReader = new DataReader(streamSocket.InputStream))
{
dataReader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
dataReader.InputStreamOptions = InputStreamOptions.Partial;

var end = false;

while (!end && await dataReader.LoadAsync(64000) != 0)
try
{
using (var dataReader = new DataReader(streamSocket.InputStream))
{
string readString;
var buffer = dataReader.ReadBuffer(dataReader.UnconsumedBufferLength);
using (var dr = DataReader.FromBuffer(buffer))
{
var bytes1251 = new Byte[buffer.Length];
dr.ReadBytes(bytes1251);

readString = Encoding.GetEncoding("UTF-8").GetString(bytes1251, 0, bytes1251.Length);
}
dataReader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
dataReader.InputStreamOptions = InputStreamOptions.Partial;

if (!string.IsNullOrEmpty(readString))
returnString += readString;
var end = false;

if (readString == null)
{
end = true;
}
else if (orstarts.FirstOrDefault(o => returnString.StartsWith(o)) != null)
{
end = true;
}
else if (orends.FirstOrDefault(o => returnString.EndsWith(o)) != null)
{
end = true;
}
else if (andstarts.FirstOrDefault(o => returnString.StartsWith(o)) != null
&& andends.FirstOrDefault(o => returnString.EndsWith(o)) != null)
while (!end && await dataReader.LoadAsync(64000) != 0)
{
end = true;
string readString;
var buffer = dataReader.ReadBuffer(dataReader.UnconsumedBufferLength);
using (var dr = DataReader.FromBuffer(buffer))
{
var bytes1251 = new Byte[buffer.Length];
dr.ReadBytes(bytes1251);

readString = Encoding.GetEncoding("UTF-8").GetString(bytes1251, 0, bytes1251.Length);
}

if (!string.IsNullOrEmpty(readString))
returnString += readString;

if (readString == null)
{
end = true;
}
else if (orstarts.FirstOrDefault(o => returnString.StartsWith(o)) != null)
{
end = true;
}
else if (orends.FirstOrDefault(o => returnString.EndsWith(o)) != null)
{
end = true;
}
else if (andstarts.FirstOrDefault(o => returnString.StartsWith(o)) != null
&& andends.FirstOrDefault(o => returnString.EndsWith(o)) != null)
{
end = true;
}
}
}

dataReader.DetachStream();
dataReader.DetachStream();
}
}
catch(Exception ex)
{
Debug.WriteLine(ex.Message);
returnString = string.Empty;
}

return returnString;
Expand All @@ -144,18 +152,25 @@ public static async Task<bool> Send(StreamSocket streamSocket, string send)
var bytearray = Encoding.GetEncoding("UTF-8").GetBytes(send);

var success = true;

using (var dataWriter = new DataWriter(streamSocket.OutputStream))
try
{
dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
using (var dataWriter = new DataWriter(streamSocket.OutputStream))
{
dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;

dataWriter.WriteBytes(bytearray);
dataWriter.WriteBytes(bytearray);

await dataWriter.StoreAsync();
await dataWriter.StoreAsync();

await dataWriter.FlushAsync();
await dataWriter.FlushAsync();

dataWriter.DetachStream();
dataWriter.DetachStream();
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
success = false;
}

return success;
Expand Down

0 comments on commit 3e12778

Please sign in to comment.