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);
                }
            }