Skip to content

Commit 9247452

Browse files
committed
Factor the task info serializer
1 parent c06bd66 commit 9247452

File tree

5 files changed

+62
-30
lines changed

5 files changed

+62
-30
lines changed

ITaskInfoSerializer.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace Gofer.NET
2+
{
3+
public interface ITaskInfoSerializer
4+
{
5+
string Serialize(TaskInfo taskInfo);
6+
7+
TaskInfo Deserialize(string taskInfoJsonString);
8+
}
9+
}

JsonTaskInfoSerializer.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using Newtonsoft.Json;
2+
3+
namespace Gofer.NET
4+
{
5+
public class JsonTaskInfoSerializer : ITaskInfoSerializer
6+
{
7+
public string Serialize(TaskInfo taskInfo)
8+
{
9+
var settings = new JsonSerializerSettings
10+
{
11+
TypeNameHandling = TypeNameHandling.All
12+
};
13+
settings.Converters.Insert(0, new JsonPrimitiveConverter());
14+
15+
var jsonString = JsonConvert.SerializeObject(taskInfo, settings);
16+
17+
return jsonString;
18+
}
19+
20+
public TaskInfo Deserialize(string taskInfoJsonString)
21+
{
22+
if (taskInfoJsonString == null)
23+
{
24+
return null;
25+
}
26+
27+
var settings = new JsonSerializerSettings
28+
{
29+
TypeNameHandling = TypeNameHandling.All
30+
};
31+
settings.Converters.Insert(0, new JsonPrimitiveConverter());
32+
33+
var taskInfo = JsonConvert.DeserializeObject<TaskInfo>(taskInfoJsonString, settings);
34+
return taskInfo;
35+
}
36+
}
37+
}

Messages.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ public static string TaskStarted(TaskInfo info) =>
1313
public static string TaskFinished(TaskInfo info, double completionSeconds) =>
1414
$"[{DateTime.Now.ToShortTimeString()}] Task Finished ({completionSeconds}s): {info.AssemblyName}.{info.MethodName} (Task Id: {info.Id})";
1515
}
16-
}
16+
}

TaskQueue.cs

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,7 @@ public void Enqueue(Expression<Action> expression)
3333

3434
private void Enqueue(TaskInfo taskInfo)
3535
{
36-
var settings = new JsonSerializerSettings
37-
{
38-
TypeNameHandling = TypeNameHandling.All
39-
};
40-
settings.Converters.Insert(0, new JsonPrimitiveConverter());
41-
42-
var jsonString = JsonConvert.SerializeObject(taskInfo, settings);
36+
var jsonString = Config.TaskInfoSerializer.Serialize(taskInfo);
4337

4438
Backend.Enqueue(jsonString);
4539
}
@@ -61,29 +55,35 @@ public void ExecuteNext()
6155
public Tuple<string, TaskInfo> SafeDequeue()
6256
{
6357
var jsonString = Backend.DequeueAndBackup();
64-
var taskInfo = JsonToTaskInfo(jsonString);
58+
var taskInfo = Config.TaskInfoSerializer.Deserialize(jsonString);
6559
return Tuple.Create(jsonString, taskInfo);
6660
}
6761

6862
public TaskInfo Dequeue()
6963
{
7064
var jsonString = Backend.Dequeue();
71-
var taskInfo = JsonToTaskInfo(jsonString);
65+
var taskInfo = Config.TaskInfoSerializer.Deserialize(jsonString);
7266
return taskInfo;
7367
}
7468

7569
public void RestoreExpiredBackupTasks()
7670
{
7771
TaskInfo taskInfo;
7872

79-
while ((taskInfo = JsonToTaskInfo(Backend.PeekBackup()))?.IsExpired(Config.MessageRetryTimeSpan) ?? false)
73+
while (true)
8074
{
75+
taskInfo = Config.TaskInfoSerializer.Deserialize(Backend.PeekBackup());
76+
if (taskInfo?.IsExpired(Config.MessageRetryTimeSpan) ?? false)
77+
{
78+
break;
79+
}
80+
8181
var lockKey = nameof(RestoreExpiredBackupTasks) + "::" + taskInfo.Id;
8282
var backupLock = Backend.LockBlocking(lockKey);
8383

8484
try
8585
{
86-
var currentTop = JsonToTaskInfo(Backend.PeekBackup());
86+
var currentTop = Config.TaskInfoSerializer.Deserialize(Backend.PeekBackup());
8787
if (currentTop.Id.Equals(taskInfo.Id))
8888
{
8989
Backend.RestoreTopBackup();
@@ -95,22 +95,5 @@ public void RestoreExpiredBackupTasks()
9595
}
9696
}
9797
}
98-
99-
private TaskInfo JsonToTaskInfo(string jsonString)
100-
{
101-
if (jsonString == null)
102-
{
103-
return null;
104-
}
105-
106-
var settings = new JsonSerializerSettings
107-
{
108-
TypeNameHandling = TypeNameHandling.All
109-
};
110-
settings.Converters.Insert(0, new JsonPrimitiveConverter());
111-
112-
var taskInfo = JsonConvert.DeserializeObject<TaskInfo>(jsonString, settings);
113-
return taskInfo;
114-
}
11598
}
11699
}

TaskQueueConfiguration.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,17 @@ public class TaskQueueConfiguration
2424
/// </summary>
2525
public bool ThreadSafe { get; set; }
2626

27+
public ITaskInfoSerializer TaskInfoSerializer { get; set; }
28+
2729
public static TaskQueueConfiguration Default()
2830
{
2931
return new TaskQueueConfiguration
3032
{
3133
QueueName = "Gofer.NET.Default",
3234
BackupQueueName = "Gofer.NET.Backup.Default",
3335
ThreadSafe = true,
34-
MessageRetryTimeSpan = TimeSpan.FromHours(1)
36+
MessageRetryTimeSpan = TimeSpan.FromHours(1),
37+
TaskInfoSerializer = new JsonTaskInfoSerializer()
3538
};
3639
}
3740
}

0 commit comments

Comments
 (0)