Ik ben voor een project bezig met een systeem dat op het door sturen van xml berichten is gebaseerd. Elk component heeft z'n eigen queue die kan worden gevuld via een remoting aanroep over http (MarshalByRefObject). Nu is het probleem dat de componenten voortborduren op deze klasse:
En daar zit de regel Common.EventHandler.server = this; in welke een static is. Dat zorgt er voor dat als je wil gaan testen met nunit en dus meerdere queues wil gaan gebruiken dat een bericht steeds weer in de zelfde queue komt te staan. De remoting klasse:
Mijn vraag is dus hoe kan ik er voor zorgen dat ik die static call niet nodig heb? Of moet ik voor elk component een aparte eventhandler maken?
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| /// <summary> /// Server is the base class for all Servers /// </summary> public class Server { /// <summary> /// every Server has a synchronized queue for sending and receiving events /// </summary> public Queue eventQueue; /// <summary> /// Default Constructor /// </summary> public Server() { eventQueue = Queue.Synchronized(new Queue()); Common.EventHandler.server = this; } } |
En daar zit de regel Common.EventHandler.server = this; in welke een static is. Dat zorgt er voor dat als je wil gaan testen met nunit en dus meerdere queues wil gaan gebruiken dat een bericht steeds weer in de zelfde queue komt te staan. De remoting klasse:
C#:
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
34
35
| /// <summary> /// The following class can be remotely created to send events to the attached Server /// </summary> public class EventHandler : MarshalByRefObject { /// <summary> /// the Server to which all created EventHandlers are attached. /// </summary> public static Server server; /// <summary> /// Default constructor. Set the static server first, or an exception will occur. /// </summary> public EventHandler() { if (server == null) throw new Exception("Define a server for this EventHandler first"); } /// <summary> /// Send a event to this server /// </summary> /// <param name="m">The event</param> /// <returns>Is the event delivered?</returns> public bool SendEvent(Event m) { // there should always be a static Server attached to a EventHandler if (server == null) { return false; } server.eventQueue.Enqueue(m); return true; } } |
Mijn vraag is dus hoe kan ik er voor zorgen dat ik die static call niet nodig heb? Of moet ik voor elk component een aparte eventhandler maken?