Make state messages thread safe
This commit is contained in:
		
							parent
							
								
									f05a816ce5
								
							
						
					
					
						commit
						abab07b8e6
					
				|  | @ -18,7 +18,13 @@ namespace Ooui | ||||||
| 
 | 
 | ||||||
|         public event Action<Message> MessageSent; |         public event Action<Message> MessageSent; | ||||||
| 
 | 
 | ||||||
|         public IEnumerable<Message> StateMessages => stateMessages; |         public IEnumerable<Message> StateMessages { | ||||||
|  |             get { | ||||||
|  |                 lock (stateMessages) { | ||||||
|  |                     return new List<Message> (stateMessages); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|         protected EventTarget (string tagName) |         protected EventTarget (string tagName) | ||||||
|         { |         { | ||||||
|  | @ -128,10 +134,10 @@ namespace Ooui | ||||||
| 
 | 
 | ||||||
|         protected void SaveStateMessage (Message message) |         protected void SaveStateMessage (Message message) | ||||||
|         { |         { | ||||||
|             stateMessages.Add (message); |             lock (stateMessages) stateMessages.Add (message); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         protected void ReplaceStateMessage (Message old, Message message) |         void LockedReplaceStateMessage (Message old, Message message) | ||||||
|         { |         { | ||||||
|             if (old != null) { |             if (old != null) { | ||||||
|                 stateMessages.Remove (old); |                 stateMessages.Remove (old); | ||||||
|  | @ -147,10 +153,12 @@ namespace Ooui | ||||||
|                     break; |                     break; | ||||||
|                 case MessageType.Set: |                 case MessageType.Set: | ||||||
|                     { |                     { | ||||||
|  |                         lock (stateMessages) { | ||||||
|                             var old = stateMessages.FirstOrDefault ( |                             var old = stateMessages.FirstOrDefault ( | ||||||
|                                 x => x.MessageType == MessageType.Set && |                                 x => x.MessageType == MessageType.Set && | ||||||
|                                     x.Key == message.Key); |                                     x.Key == message.Key); | ||||||
|                         ReplaceStateMessage (old, message); |                             LockedReplaceStateMessage (old, message); | ||||||
|  |                         } | ||||||
|                     } |                     } | ||||||
|                     break; |                     break; | ||||||
|                 case MessageType.Listen: |                 case MessageType.Listen: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue