summaryrefslogtreecommitdiff
path: root/code/common/MessageHandler.cs
blob: acd63eb64d349e3c04a0a793f1d90faaea75a804 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.IO;
using ProtoBuf;
using Rhino.Queues.Model;

namespace common
{
    public class MessageHandler
    {
        DependencyRegistry registry;

        public MessageHandler(DependencyRegistry registry)
        {
            this.registry = registry;
        }

        public void handler(Message item)
        {
            var payload = parse_payload_from(item);
            registry
                .get_all<Handler>()
                .each(x => x.handle(payload));
        }

        object parse_payload_from(Message item)
        {
            using (var stream = new MemoryStream(item.Data))
            {
                return Serializer.NonGeneric.Deserialize(Type.GetType(item.Headers["type"]), stream);
            }
        }
    }
}