internal DataBroadCastHandler(BroadCastMode BroadCastMode, string BroadcastIDName, BroadcastableData data)
 {
     this._broadCastableData = data;
     this._mode            = BroadCastMode;
     this._broadcastIDName = BroadcastIDName.ToUpper();
     this._XMLDataString   = this.GetXMLString();
 }
            internal static DataBroadCastHandler ParseAndGet_DataBroadCastHandler_FromXMLDataString(string XMLDataString)
            {
                System.IO.StringReader   sr     = null;
                System.Xml.XmlTextReader m_xmlr = null;

                try
                {
                    sr     = new System.IO.StringReader(XMLDataString);
                    m_xmlr = new System.Xml.XmlTextReader(sr);
                    m_xmlr.WhitespaceHandling = System.Xml.WhitespaceHandling.None;
                }
                catch (System.Xml.XmlException)
                {
                    string msg;
                    msg = "Error trying to get XML format from broadcasted data string [" + XMLDataString + "]";
                }
                catch (Exception ex)
                {
                    string msg = "";
                    msg = "Error trying to parse broadcasted XML string : " + ex.Message;
                    throw (new Exception(msg));
                }
                m_xmlr.Read();
                string HeaderIdentifier = m_xmlr.Name;

                if (HeaderIdentifier != "BROADCAST_HANDLER")
                {
                    throw (new System.Xml.XmlException("Invalid data header " + HeaderIdentifier + ". Must be \'BROADCAST_HANDLER\'"));
                }
                else
                {
                    //read the mode attribute from the current section "BROADCAST_HANDLER"
                    BroadCastMode mode    = default(BroadCastMode);
                    string        modeStr = m_xmlr.GetAttribute("broadcastMode");
                    switch (modeStr)
                    {
                    case "BroadCasterIsWaitingReply":
                        mode = BroadCastMode.BroadCasterIsWaitingReply;
                        break;

                    case "BroadCasterIsNotWaitingReply":
                        mode = BroadCastMode.BroadCasterIsNotWaitingReply;
                        break;

                    default:
                        mode = BroadCastMode.undefined;
                        break;
                    }

                    string broadCastIDName = "";
                    broadCastIDName = m_xmlr.GetAttribute("broadcastIDName");
                    if (broadCastIDName == null)
                    {
                        throw (new Exception("No attribute \'broadcastIDName\' in XML data string [" + XMLDataString + "]"));
                    }

                    //retrieves all the xml string of the broadcastable data section
                    m_xmlr.Read();
                    string               broadCastedXMLString = m_xmlr.ReadOuterXml();
                    BroadcastableData    data    = BroadcastableData.ParseAndGet_BroadcastableData_FromXMLDataString(broadCastedXMLString);
                    DataBroadCastHandler handler = new DataBroadCastHandler(mode, broadCastIDName, data);
                    return(handler);
                }
            }
            internal static BroadcastableData ParseAndGet_BroadcastableData_FromXMLDataString(string XMLDataString)
            {
                System.IO.StringReader   sr     = null;
                System.Xml.XmlTextReader m_xmlr = null;

                string broadCasterName          = "";
                string broadCasterHost          = "";
                int    broadCasterListeningPort = 0;

                try
                {
                    sr     = new System.IO.StringReader(XMLDataString);
                    m_xmlr = new System.Xml.XmlTextReader(sr);
                    m_xmlr.WhitespaceHandling = System.Xml.WhitespaceHandling.None;
                }
                catch (System.Xml.XmlException)
                {
                    string msg;
                    msg = "Error trying to get XML format from broadcasted data string [" + XMLDataString + "]";
                }
                catch (Exception ex)
                {
                    string msg = "";
                    msg = "Error trying to parse broadcasted XML string : " + ex.Message;
                    throw (new Exception(msg));
                }
                m_xmlr.Read();
                string HeaderIdentifier = m_xmlr.Name;

                if (HeaderIdentifier != "BROADCASTED_DATA")
                {
                    throw (new System.Xml.XmlException("Invalid data header " + HeaderIdentifier + ". Must be \'BROADCASTED_DATA\'"));
                }
                else
                {
                    m_xmlr.Read();
                    string broadCasterHeader = m_xmlr.Name;
                    if (broadCasterHeader != "BROADCASTER_INFO")
                    {
                        throw (new System.Xml.XmlException("Invalid XML structure was expected a <BROADCASTER_INFO> and was found " + broadCasterHeader));
                    }
                    else
                    {
                        //*******************************************************
                        //gets the data broadcaster information
                        //*******************************************************
                        broadCasterName = m_xmlr.GetAttribute("name");
                        if (broadCasterName == null)
                        {
                            throw (new Exception("Can\'t determine the attribute NAME of the section <BROADCASTER_INFO> from XML String  [" + XMLDataString + "]"));
                        }

                        broadCasterHost = m_xmlr.GetAttribute("host");
                        if (broadCasterHost == null)
                        {
                            throw (new Exception("Can\'t determine the attribute HOST of the section <BROADCASTER_INFO> from XML String  [" + XMLDataString + "]"));
                        }

                        string PORT = m_xmlr.GetAttribute("listeningPort");

                        if (PORT == null)
                        {
                            throw (new Exception("Can\'t determine the attribute LISTENINGPORT of the section <BROADCASTER_INFO> from XML String  [" + XMLDataString + "]"));
                        }
                        broadCasterListeningPort = System.Convert.ToInt32(PORT);


                        //*******************************************************
                        //gets the data from the XML string
                        //*******************************************************
                        string dataValueAsString = "";
                        m_xmlr.Read();
                        m_xmlr.Read();
                        dataValueAsString = m_xmlr.ReadOuterXml();
                        DataVariable      var             = XMLDataFormatting.RetrieveDataVariableFromXMLString(dataValueAsString);
                        BroadcastableData broadCastedData = new BroadcastableData(broadCasterName, broadCasterHost, broadCasterListeningPort, System.Convert.ToString(var.Name), var.Data);
                        return(broadCastedData);
                    }
                }
            }