Line data Source code
1 : using System;
2 : using System.Collections.Generic;
3 : using System.Text;
4 : using Cqrs.Events;
5 : using EventStore.ClientAPI;
6 : using Newtonsoft.Json;
7 : using Newtonsoft.Json.Converters;
8 : using EventData=EventStore.ClientAPI.EventData;
9 :
10 : namespace Cqrs.EventStore
11 : {
12 : public class EventFactory<TAuthenticationToken> : IEventBuilder<TAuthenticationToken>, IEventDeserialiser<TAuthenticationToken>
13 0 : {
14 : #region Implementation of IEventDeserialiser
15 :
16 0 : public IEvent<TAuthenticationToken> Deserialise(RecordedEvent eventData)
17 : {
18 : JsonSerializerSettings jsonSerialiserSettings = GetSerialisationSettings();
19 :
20 : switch (eventData.EventType)
21 : {
22 : case "Client Connected":
23 : return JsonConvert.DeserializeObject<SimpleEvent<TAuthenticationToken>>(new UTF8Encoding().GetString(eventData.Data), jsonSerialiserSettings);
24 : default:
25 : return (IEvent<TAuthenticationToken>)JsonConvert.DeserializeObject(new UTF8Encoding().GetString(eventData.Data), Type.GetType(eventData.EventType));
26 : }
27 : }
28 :
29 0 : public IEvent<TAuthenticationToken> Deserialise(ResolvedEvent notification)
30 : {
31 : return Deserialise(notification.Event);
32 : }
33 :
34 0 : public JsonSerializerSettings GetSerialisationSettings()
35 : {
36 : return new JsonSerializerSettings
37 : {
38 : Formatting = Formatting.None,
39 : MissingMemberHandling = MissingMemberHandling.Ignore,
40 : DateParseHandling = DateParseHandling.DateTimeOffset,
41 : DateTimeZoneHandling = DateTimeZoneHandling.Utc,
42 : Converters = new List<JsonConverter> { new StringEnumConverter() },
43 : };
44 : }
45 :
46 : #endregion
47 :
48 : #region Implementation of IEventBuilder
49 :
50 0 : public EventData CreateFrameworkEvent(string type, IEvent<TAuthenticationToken> eventData)
51 : {
52 : JsonSerializerSettings jsonSerialiserSettings = GetSerialisationSettings();
53 :
54 : return new EventData
55 : (
56 : Guid.NewGuid(),
57 : type,
58 : true,
59 : new UTF8Encoding().GetBytes(JsonConvert.SerializeObject(eventData, jsonSerialiserSettings)),
60 : new byte[0]
61 : );
62 : }
63 :
64 0 : public EventData CreateFrameworkEvent(IEvent<TAuthenticationToken> eventData)
65 : {
66 : JsonSerializerSettings jsonSerialiserSettings = GetSerialisationSettings();
67 :
68 : return new EventData
69 : (
70 : Guid.NewGuid(),
71 : eventData.GetType().AssemblyQualifiedName,
72 : true,
73 : new UTF8Encoding().GetBytes(JsonConvert.SerializeObject(eventData, jsonSerialiserSettings)),
74 : new byte[0]
75 : );
76 : }
77 :
78 0 : public EventData CreateFrameworkEvent(string eventDataBody)
79 : {
80 : return CreateFrameworkEvent
81 : (
82 : new SimpleEvent<TAuthenticationToken> { Id = Guid.NewGuid(), Message = eventDataBody, TimeStamp = DateTimeOffset.Now, Version = 1 }
83 : );
84 : }
85 :
86 0 : public EventData CreateFrameworkEvent(string type, string eventDataBody)
87 : {
88 : return CreateFrameworkEvent
89 : (
90 : type,
91 : new SimpleEvent<TAuthenticationToken> { Id = Guid.NewGuid(), Message = eventDataBody, TimeStamp = DateTimeOffset.Now, Version = 1 }
92 : );
93 : }
94 :
95 0 : public EventData CreateClientConnectedEvent(string clientName)
96 : {
97 : return CreateFrameworkEvent
98 : (
99 : "Client Connected",
100 : string.Format("{0} has connected.", clientName)
101 : );
102 : }
103 :
104 : #endregion
105 : }
106 : }
|