source: proiecte/ParallelANN/BCMToolbox/Pipe.cs @ 171

Last change on this file since 171 was 171, checked in by (none), 14 years ago
File size: 2.2 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5
6namespace BCMToolbox
7{
8    [Serializable]
9    public abstract class LocalMessage
10    {
11        public readonly string MessageType = null;
12
13        protected LocalMessage(string newType)
14        {
15            MessageType = newType;
16        }
17
18        public override string ToString()
19        {
20            return MessageType;
21        }
22    }
23
24    public class LocalMessageEventArgs : EventArgs
25    {
26        LocalMessage __message = null;
27        public LocalMessageEventArgs(LocalMessage newMessage)
28        {
29            __message = newMessage;
30        }
31
32        public LocalMessage Message
33        {
34            get
35            {
36                return __message;
37            }
38        }
39    }
40
41    public class LocalPipe
42    {
43        Dictionary<string, int> __messageCount = new Dictionary<string, int>();
44        object __syncRoot = new object();
45
46
47        public object SyncRoot
48        {
49            get
50            {
51                return __syncRoot;
52            }
53        }
54
55        public void ResetPipe()
56        {
57            __messageCount.Clear();
58        }
59
60        public int this[string MessageType]
61        {
62            get
63            {
64                if (!__messageCount.ContainsKey(MessageType))
65                    return 0;
66                return __messageCount[MessageType];
67            }
68        }
69
70        public bool SendMessage(LocalMessage theMessage)
71        {
72            lock (__syncRoot)
73            {
74                if (!__messageCount.ContainsKey(theMessage.MessageType))
75                    __messageCount.Add(theMessage.MessageType, 0);
76
77                int count = __messageCount[theMessage.MessageType];
78                count++;
79                __messageCount[theMessage.MessageType] = count;
80            }
81
82            if (this.MessageReceive != null)
83            {
84                this.MessageReceive(this, new LocalMessageEventArgs(theMessage));
85                return true;
86            }
87            else
88                return false;
89        }
90
91        public event EventHandler<LocalMessageEventArgs> MessageReceive;
92    }
93}
Note: See TracBrowser for help on using the repository browser.