Click here to Skip to main content
15,896,557 members
Articles / Web Development / HTML

My own Mailinator in 5 minutes

Rate me:
Please Sign up or sign in to vote.
5.00/5 (6 votes)
19 Nov 2012CPOL6 min read 31.7K   405   13  
A simple Mailinator clone developed in five minutes with the NetFluid framework
using System;
using System.Collections.Generic;
using System.Text;

namespace LumiSoft.Net.RTP
{
    /// <summary>
    /// This class represents RTP session/multimedia-session local participant.
    /// </summary>
    /// <remarks>Term <b>participant</b> is not well commented/defined in RTP. In general for single media session <b>participant</b>
    /// is RTP session itself, for multimedia sesssion <b>participant</b> is multimedia session(RTP sessions group).</remarks>
    public class RTP_Participant_Local : RTP_Participant
    {        
        private string                   m_Name                    = null;
        private string                   m_Email                   = null;
        private string                   m_Phone                   = null;
        private string                   m_Location                = null;
        private string                   m_Tool                    = null;
        private string                   m_Note                    = null;
        private CircleCollection<string> m_pOtionalItemsRoundRobin = null;

        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="cname">Canonical name of participant.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>cname</b> is null reference.</exception>
        public RTP_Participant_Local(string cname) : base(cname)
        {
            m_pOtionalItemsRoundRobin = new CircleCollection<string>();
        }


        #region method AddNextOptionalSdesItem

        /// <summary>
        /// Adds next(round-robined) optional SDES item to SDES chunk, if any available.
        /// </summary>
        /// <param name="sdes">SDES chunk where to add item.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>sdes</b> is null reference.</exception>
        internal void AddNextOptionalSdesItem(RTCP_Packet_SDES_Chunk sdes)
        {
            if(sdes == null){
                throw new ArgumentNullException("sdes");
            }

            lock(m_pOtionalItemsRoundRobin){
                if(m_pOtionalItemsRoundRobin.Count > 0){
                    string itemName = m_pOtionalItemsRoundRobin.Next();

                    if(itemName == "name"){
                        sdes.Name = m_Name;
                    }
                    else if(itemName == "email"){
                        sdes.Email = m_Email;
                    }
                    else if(itemName == "phone"){
                        sdes.Phone = m_Phone;
                    }
                    else if(itemName == "location"){
                        sdes.Location = m_Location;
                    }
                    else if(itemName == "tool"){
                        sdes.Tool = m_Tool;
                    }
                    else if(itemName == "note"){
                        sdes.Note = m_Note;
                    }
                }
            }
        }

        #endregion


        #region method ConstructOptionalItems

        /// <summary>
        /// Constructs optional SDES items round-robin.
        /// </summary>
        private void ConstructOptionalItems()
        {
            lock(m_pOtionalItemsRoundRobin){
                m_pOtionalItemsRoundRobin.Clear();

                if(!string.IsNullOrEmpty(m_Note)){
                    m_pOtionalItemsRoundRobin.Add("note");
                }
                if(!string.IsNullOrEmpty(m_Name)){
                    m_pOtionalItemsRoundRobin.Add("name");
                }
                if(!string.IsNullOrEmpty(m_Email)){
                    m_pOtionalItemsRoundRobin.Add("email");
                }
                if(!string.IsNullOrEmpty(m_Phone)){
                    m_pOtionalItemsRoundRobin.Add("phone");
                }
                if(!string.IsNullOrEmpty(m_Location)){
                    m_pOtionalItemsRoundRobin.Add("location");
                }
                if(!string.IsNullOrEmpty(m_Tool)){
                    m_pOtionalItemsRoundRobin.Add("tool");
                }                
            }
        }

        #endregion


        #region Properties implementation
                
        /// <summary>
        /// Gets or sets the real name, eg. "John Doe". Value null means not specified.
        /// </summary>
        public string Name
        {
            get{ return m_Name; }

            set{ 
                m_Name = value; 

                ConstructOptionalItems();
            }
        }

        /// <summary>
        /// Gets or sets email address. For example "John.Doe@example.com". Value null means not specified.
        /// </summary>
        public string Email
        {
            get{ return m_Email; }

            set{ 
                m_Email = value; 

                ConstructOptionalItems();
            }
        }

        /// <summary>
        /// Gets or sets phone number. For example "+1 908 555 1212". Value null means not specified.
        /// </summary>
        public string Phone
        {
            get{ return m_Phone; }

            set{ 
                m_Phone = value; 

                ConstructOptionalItems();
            }
        }

        /// <summary>
        /// Gets  or sets location string. It may be geographic address or for example chat room name.
        /// Value null means not specified.
        /// </summary>
        public string Location
        {
            get{ return m_Location; }

            set{ 
                m_Location = value; 

                ConstructOptionalItems();
            }
        }

        /// <summary>
        /// Gets or sets streaming application name/version.
        /// Value null means not specified.
        /// </summary>
        public string Tool
        {
            get{ return m_Tool; }

            set{ 
                m_Tool = value; 

                ConstructOptionalItems();
            }
        }

        /// <summary>
        /// Gets or sets note text. The NOTE item is intended for transient messages describing the current state
        /// of the source, e.g., "on the phone, can't talk". Value null means not specified.
        /// </summary>
        public string Note
        {
            get{ return m_Note; }

            set{ 
                m_Note = value; 

                ConstructOptionalItems();
            }
        }

        // TODO: PRIV

        #endregion

    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Chief Technology Officer Genny Mobility
Italy Italy
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions