Skip to content

Commit

Permalink
no message
Browse files Browse the repository at this point in the history
  • Loading branch information
tillerstarredwards committed Feb 5, 2016
1 parent d6a802c commit 65248aa
Show file tree
Hide file tree
Showing 7 changed files with 73 additions and 23 deletions.
4 changes: 2 additions & 2 deletions FireSharp.Test.Console/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ private static async void EventStreaming()
{
await _client.DeleteAsync("chat");

await _client.OnAsync("chat",
await _client.OnAsync("chat", string.Empty,
added: async (sender, args) =>
{
System.Console.WriteLine(args.Data + "-> 1\n");
Expand All @@ -48,7 +48,7 @@ await _client.OnAsync("chat",
changed: (sender, args) => { System.Console.WriteLine(args.Data); },
removed: (sender, args) => { System.Console.WriteLine(args.Path); });

await _client.OnAsync("chat",
await _client.OnAsync("chat",string.Empty,
added: (sender, args) => { System.Console.WriteLine(args.Data + " -> 2\n"); },
changed: (sender, args) => { System.Console.WriteLine(args.Data); },
removed: (sender, args) => { System.Console.WriteLine(args.Path); });
Expand Down
24 changes: 23 additions & 1 deletion FireSharp/EventStreaming/TemporaryCache.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace FireSharp.EventStreaming
{
Expand All @@ -13,8 +14,11 @@ internal sealed class TemporaryCache
private readonly SimpleCacheItem _tree = new SimpleCacheItem();
private readonly object _treeLock = new object();

public TemporaryCache()
private bool _objectChanged;

public TemporaryCache(bool objectChanged)
{
_objectChanged = objectChanged;
_tree.Name = string.Empty;
_tree.Created = false;
_tree.Parent = null;
Expand Down Expand Up @@ -44,6 +48,23 @@ public void Update(string path, JsonReader data)
}
}

public void Replace(string path,JObject o)
{
if (o != null)
{
OnAdded(new ValueAddedEventArgs(path, o));
}
else
{
OnRemoved(new ValueRemovedEventArgs(path));
}
}

public void Update(string path, JObject o)
{
OnUpdated(new ValueChangedEventArgs(path,o,o));
}

private SimpleCacheItem FindRoot(string path)
{
var segments = path.Split(_seperator, StringSplitOptions.RemoveEmptyEntries);
Expand Down Expand Up @@ -111,6 +132,7 @@ private void UpdateChildren(SimpleCacheItem root, JsonReader reader, bool replac
case JsonToken.Null:
DeleteChild(root);
return;
case JsonToken.EndObject: return;
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions FireSharp/EventStreaming/ValueAddedEventArgs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ namespace FireSharp.EventStreaming
{
public class ValueAddedEventArgs : EventArgs
{
public ValueAddedEventArgs(string path, string data)
public ValueAddedEventArgs(string path, object data)
{
Path = path;
Data = data;
}

public string Path { get; private set; }
public string Data { get; private set; }
public object Data { get; private set; }
}
}
6 changes: 3 additions & 3 deletions FireSharp/EventStreaming/ValueChangedEventArgs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ namespace FireSharp.EventStreaming
{
public class ValueChangedEventArgs : EventArgs
{
public ValueChangedEventArgs(string path, string data, string oldData)
public ValueChangedEventArgs(string path, object data, object oldData)
{
Path = path;
Data = data;
OldData = oldData;
}

public string Path { get; private set; }
public string Data { get; private set; }
public string OldData { get; private set; }
public object Data { get; private set; }
public object OldData { get; private set; }
}
}
6 changes: 3 additions & 3 deletions FireSharp/FirebaseClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -329,18 +329,18 @@ public async Task<EventStreamResponse> ListenAsync(string path, ValueAddedEventH
ValueChangedEventHandler changed = null,
ValueRemovedEventHandler removed = null)
{
return new EventStreamResponse(await _requestManager.ListenAsync(path).ConfigureAwait(false), added, changed, removed);
return new EventStreamResponse(await _requestManager.ListenAsync(path).ConfigureAwait(false), false, added, changed, removed);
}

public async Task<EventRootResponse<T>> OnChangeGetAsync<T>(string path, ValueRootAddedEventHandler<T> added = null)
{
return new EventRootResponse<T>(await _requestManager.ListenAsync(path).ConfigureAwait(false), added, _requestManager, path);
}

public async Task<EventStreamResponse> OnAsync(string path, ValueAddedEventHandler added = null, ValueChangedEventHandler changed = null,
public async Task<EventStreamResponse> OnAsync(string path, string query, bool objectChanged=false, ValueAddedEventHandler added = null, ValueChangedEventHandler changed = null,
ValueRemovedEventHandler removed = null)
{
return new EventStreamResponse(await _requestManager.ListenAsync(path).ConfigureAwait(false), added, changed, removed);
return new EventStreamResponse(await _requestManager.ListenAsync(path, query).ConfigureAwait(false), objectChanged, added, changed, removed);
}

private void HandleIfErrorResponse(HttpStatusCode statusCode, string content, Action<HttpStatusCode, string> errorHandler = null)
Expand Down
2 changes: 1 addition & 1 deletion FireSharp/Interfaces/IFirebaseClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Task<EventStreamResponse> ListenAsync(string path,
ValueChangedEventHandler changed = null,
ValueRemovedEventHandler removed = null);

Task<EventStreamResponse> OnAsync(string path,
Task<EventStreamResponse> OnAsync(string path, string query, bool objectChanged = false,
ValueAddedEventHandler added = null,
ValueChangedEventHandler changed = null,
ValueRemovedEventHandler removed = null);
Expand Down
50 changes: 39 additions & 11 deletions FireSharp/Response/EventStreamResponse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using System.Threading.Tasks;
using FireSharp.EventStreaming;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace FireSharp.Response
{
Expand All @@ -14,15 +15,17 @@ public class EventStreamResponse
private readonly TemporaryCache _cache;
private readonly CancellationTokenSource _cancel;
private readonly Task _pollingTask;

private bool _objectChanged;
internal EventStreamResponse(HttpResponseMessage httpResponse,
bool objectChanged=false,
ValueAddedEventHandler added = null,
ValueChangedEventHandler changed = null,
ValueRemovedEventHandler removed = null)
{
_objectChanged = objectChanged;
_cancel = new CancellationTokenSource();

_cache = new TemporaryCache();
_cache = new TemporaryCache(objectChanged);

if (added != null)
{
Expand Down Expand Up @@ -65,6 +68,9 @@ await Task.Factory.StartNew(async () =>

if (read.StartsWith("data: "))
{
if (eventName == "keep-alive")
continue;

if (string.IsNullOrEmpty(eventName))
{
throw new InvalidOperationException("Payload data was received but an event did not preceed it.");
Expand All @@ -89,26 +95,48 @@ public void Cancel()
_cancel.Cancel();
}

private void Update(string eventName, string p)
private async Task Update(string eventName, string p)
{
switch (eventName)
{
case "put":
case "patch":
using (var r = new StringReader(p))
using (JsonReader reader = new JsonTextReader(r))
{
ReadToNamedPropertyValue(reader, "path");
reader.Read();
var path = reader.Value.ToString();

if (eventName == "put")
if (_objectChanged)
{
_cache.Replace(path, ReadToNamedPropertyValue(reader, "data"));
string s = await r.ReadToEndAsync();
JObject j=JObject.Parse(s);
if (j != null)
{
string path = j.GetValue("path").ToString();
if (eventName == "put")
{
_cache.Replace(path, j.GetValue("data") as JObject);
}
else
{
_cache.Update(path, j.GetValue("data") as JObject);
}
}
}
else
{
_cache.Update(path, ReadToNamedPropertyValue(reader, "data"));
using (JsonReader reader = new JsonTextReader(r))
{
ReadToNamedPropertyValue(reader, "path");
reader.Read();
var path = reader.Value.ToString();

if (eventName == "put")
{
_cache.Replace(path, ReadToNamedPropertyValue(reader, "data"));
}
else
{
_cache.Update(path, ReadToNamedPropertyValue(reader, "data"));
}
}
}
}
break;
Expand Down

0 comments on commit 65248aa

Please sign in to comment.