Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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));
            }
        }