private void IdentifyMessageType(byte[] payload) { if (_identifiedMessageType) { return; } try { try { ChoScalarObject scalarObject = (ChoScalarObject)ChoObject.Deserialize(payload); _messageType = ChoUDPMessageType.Binary; } catch { try { ChoScalarObject scalarObject = (ChoScalarObject)ChoObject.XmlDeserialize <ChoScalarObject>(_encoding.GetString(payload)); _messageType = ChoUDPMessageType.Xml; } catch { Trace.WriteLine("Failed to identity message type. Messages will be discarded."); } } } finally { _identifiedMessageType = true; } }
private void ReceiveCallback(IAsyncResult ar) { IPEndPoint ep = null; var args = (object[])ar.AsyncState; var session = (UdpClient)args[0]; var local = (IPEndPoint)args[1]; try { Byte[] payload = session.EndReceive(ar, ref ep); EventHandler <ChoUDPMessageEventArgs> rawMessageReceived = RawMessageReceived; EventHandler <ChoUDPMessageEventArgs> messageReceived = MessageReceived; if (rawMessageReceived != null) { rawMessageReceived(this, new ChoUDPMessageEventArgs(null, payload)); } else if (messageReceived != null) { IdentifyMessageType(payload); if (_messageType == null) { if (rawMessageReceived != null) { rawMessageReceived(this, new ChoUDPMessageEventArgs(null, payload)); } } else if (_messageType.Value == ChoUDPMessageType.Xml) { try { ChoScalarObject scalarObject = (ChoScalarObject)ChoObject.XmlDeserialize <ChoScalarObject>(_encoding.GetString(payload)); MessageReceived(this, new ChoUDPMessageEventArgs(scalarObject, null)); } catch (Exception ex) { ChoTrace.Error(ex.ToString()); } } else { try { ChoScalarObject scalarObject = (ChoScalarObject)ChoObject.Deserialize(payload); MessageReceived(this, new ChoUDPMessageEventArgs(scalarObject, null)); } catch (Exception ex) { ChoTrace.Error(ex.ToString()); } } } } finally { _recieveResult = session.BeginReceive(ReceiveCallback, args); } }
private void ReceiveCallback(IAsyncResult ar) { try { Byte[] payload = _listener.EndReceive(ar, ref _groupEP); EventHandler <ChoUDPMessageEventArgs> rawMessageReceived = RawMessageReceived; EventHandler <ChoUDPMessageEventArgs> messageReceived = MessageReceived; if (rawMessageReceived != null) { rawMessageReceived(this, new ChoUDPMessageEventArgs(null, payload)); } else if (messageReceived != null) { IdentifyMessageType(payload); if (_messageType == null) { if (rawMessageReceived != null) { rawMessageReceived(this, new ChoUDPMessageEventArgs(null, payload)); } } else if (_messageType.Value == ChoUDPMessageType.Xml) { try { ChoScalarObject scalarObject = (ChoScalarObject)ChoObject.XmlDeserialize <ChoScalarObject>(_encoding.GetString(payload)); MessageReceived(this, new ChoUDPMessageEventArgs(scalarObject, null)); } catch (Exception ex) { ChoTrace.Error(ex.ToString()); } } else { try { ChoScalarObject scalarObject = (ChoScalarObject)ChoObject.Deserialize(payload); MessageReceived(this, new ChoUDPMessageEventArgs(scalarObject, null)); } catch (Exception ex) { ChoTrace.Error(ex.ToString()); } } } } finally { _recieveResult = _listener.BeginReceive(ReceiveCallback, null); } }
public T GetData() { try { if (!_event.WaitOne(5000)) { return(default(T)); } using (MemoryMappedViewStream stream = mf.CreateViewStream(0, 0, MemoryMappedFileAccess.Read)) { if (_msgFormatter == ChoMsgFormatter.Binary) { return(ChoObject.Deserialize <T>(stream)); } else { return(ChoObject.XmlDeserialize <T>(stream)); } } } catch (FileNotFoundException) { return(default(T)); } catch (WaitHandleCannotBeOpenedException) { return(default(T)); } catch (SerializationException) { return(default(T)); } catch (AbandonedMutexException) { return(default(T)); } }