Click here to Skip to main content
15,896,557 members
Articles / Programming Languages / C#

NetMeeting for Windows 7

Rate me:
Please Sign up or sign in to vote.
3.75/5 (9 votes)
1 Nov 2013CPOL2 min read 129.6K   10.4K   41  
Share Desktops between Windows 7 Systems
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using MADMeeting.ServiceLibrary;
using RDPCOMAPILib;

namespace MADMeeting.MainUI
{
    public partial class MADMeetingUI : Form
    {
        int Proto = 0;

        private Listener Mlistener = Listener.ListerInstance;
        private Sender Msender = Sender.SenderInstace;
        private MMChat Chatwindow = new MMChat();
        private List<LoggedUserClass> LoggedUsers = new List<LoggedUserClass>();
        //MMServiceHost host = new MMServiceHost();

        public MADMeetingUI()
        {
           
            StartServer();
            //MessageBox.Show("Ready ?");
            System.Threading.Thread.Sleep(5000); //Wait For 5 Seconds for the server to start
            InitializeComponent();
            Mlistener.eventMessageRecd += new Listener.dlgReceivedMessage(Mlistener_eventMessageRecd);
            Mlistener.eventUserLogged += new Listener.dlgUserLogged(Mlistener_eventUserLogged);
            ConnectLocal();
            appstatuslabel.Text = "Ready";
            UpdateUI();

            wbar.RaiseCloseEvent();

        }

        void Mlistener_eventUserLogged(MessageEventArgs Message)
        {
            dgrid_users.Rows.Add();
            int RowIndex = dgrid_users.RowCount-1;
            DataGridViewRow UserRow = dgrid_users.Rows[RowIndex];
            UserRow.Cells["UserName"].Value = Message.person.Name;

            
        }

        private void UpdateUI()
        {
            ToolTip Tooltip = new ToolTip();
            Tooltip.AutoPopDelay = 5000;
            Tooltip.InitialDelay = 1000;
            Tooltip.ReshowDelay = 500;

            Tooltip.ShowAlways = true;

            Tooltip.SetToolTip(this.btn_desktopShare, "Share My Desktop");
            Tooltip.SetToolTip(this.btn_chat, "Chat");
            Tooltip.SetToolTip(this.btn_whiteboard, "White Board");
            Tooltip.SetToolTip(this.btn_connect, "Connect");
            Tooltip.SetToolTip(this.btn_disconnect, "Disconnect");
            
        }

        void Mlistener_eventMessageRecd(MessageEventArgs Message)
        {
            switch (Message.msgType)
            {
                case MessageType.DesktopShare:
                    HandleDesktopShareMessage(Message);
                    break;
                case MessageType.ChatMessage:
                    btn_chat_Click(null, null);
                    break;
                case MessageType.UserEnter:
                    HandleUserEntered(Message);
                    break;


            }


        }

        private void HandleUserEntered(MessageEventArgs MsgArgs)
        {
            LoggedUsers.Add(new LoggedUserClass(MsgArgs.person, "Online"));

            if (LoggedUsers.Count > 1)
            {
                dgrid_users.Rows.Clear();
                foreach (LoggedUserClass user in LoggedUsers)
                {
                    string[] row = new string[] { user.User.Name, user.status };
                    dgrid_users.Rows.Add(row);


                }
            }


        }

        private void HandleDesktopShareMessage(MessageEventArgs MsgArgs)
        {
            if (MsgArgs.person.Name != Environment.MachineName)
            {
                DesktopViewer dview = new DesktopViewer(MsgArgs.message);
                dview.ShowDesktop();
                dview.Show();
            }

        }

        private void StartServer()
        {
            Process Server = new Process();
            string filepath = "MADMeeting.ServiceHost.exe";
            if (System.IO.File.Exists(filepath))
            {
                Server.StartInfo = new ProcessStartInfo(filepath);
                Server.StartInfo.Arguments = "8971";
                Server.Start();

            }

        }



        private void MADMeetingUI_Load(object sender, EventArgs e)
        {

        }


        private void ConnectLocal()
        {
            Mlistener.Proto = 0;
            Msender.Proto = 0;


            Mlistener.SetTargetAddress("localhost", 8971);
            Msender.SetTargetAddress("localhost", 8971);

            Mlistener.Initialize();
            Msender.Initialize(Mlistener);

        }

        private void btn_connect_Click(object sender, EventArgs e)
        {
            try
            {

                //ShowWaitBar("Connecting to the Target Computer....Please Wait");
                ShowStatus("Connecting....");
                HandleConnect();
                ShowStatus("Connected");
                if (wbar != null)
                    wbar.RaiseCloseEvent();
            }
            catch (Exception ex)
            {
                ShowError("Cannot Connect to the destination Computer.");
            }
        }

        WaitBar wbar = new WaitBar("");
        private void ShowWaitBar(string waitstring)
        {
            wbar = new WaitBar(waitstring);
            wbar.Event_AfterWait += new WaitBar.Dlg_AfterWait(wbar_Event_AfterWait);
          
            wbar.ShowDialog();
        }

        void wbar_Event_AfterWait()
        {
            wbar.Hide();
        }

        delegate void dlgShowError(string ErrorString);
        private void ShowError(string ErrorString)
        {
            if (this.appstatus.InvokeRequired)
            {
                dlgShowError dlg = new dlgShowError(ShowError);
                this.Invoke(dlg, new object[] { ErrorString });
            }
            else
            {
                appstatuslabel.Text = ErrorString;
            }
        }

        
        
        delegate void dlgShowStatus(string StatusString);
        private void ShowStatus(string StatusString)
        {
            if (this.appstatus.InvokeRequired)
            {
                dlgShowStatus dlg = new dlgShowStatus(ShowStatus);
                this.Invoke(dlg, new object[] { StatusString });

            }
            else
            {
                appstatuslabel.Text = StatusString;
            }
        }


        private void HandleConnect()
        {
                Mlistener.Proto = 0;
                Msender.Proto = 0;


                Mlistener.SetTargetAddress(txt_targetaddress.Text, 8971);
                Msender.SetTargetAddress(txt_targetaddress.Text, 8971);


                Mlistener.Initialize();
                Msender.Initialize(Mlistener);
            
        }


        private void MADMeetingUI_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                foreach (Process pp in Process.GetProcessesByName("MADMeeting.ServiceHost"))
                {
                    pp.Kill();
                }
            }
            catch (Exception ex)
            {

            }
        }



        private void btn_chat_Click(object sender, EventArgs e)
        {
            HandleChat();

        }

        private void HandleChat()
        {
            bool initialize = false;

            if (Chatwindow != null)
            {
                if (Chatwindow.IsDisposed)
                    initialize = true;
            }
            else
                initialize = true;

            if (initialize)
                Chatwindow = new MMChat();

            Chatwindow.Show();

        }

        private RDPSession m_pRdpSession = new RDPSession();
        private bool desktopshared = false;
        private void btn_desktopShare_Click(object sender, EventArgs e)
        {

            if(desktopshared)
            {
                if (MessageBox.Show("A Session is already in Progress...Do you want to Stop it","MAD Meeting",MessageBoxButtons.OKCancel) == DialogResult.OK)
                {
                    m_pRdpSession.Close();
                    desktopshared = false;
                    return;
                }
                else
                    return;
            }

           

            m_pRdpSession.OnAttendeeConnected += new RDPCOMAPILib._IRDPSessionEvents_OnAttendeeConnectedEventHandler(OnAttendeeConnected);
            m_pRdpSession.OnAttendeeDisconnected += new RDPCOMAPILib._IRDPSessionEvents_OnAttendeeDisconnectedEventHandler(OnAttendeeDisconnected);
            m_pRdpSession.OnControlLevelChangeRequest += new RDPCOMAPILib._IRDPSessionEvents_OnControlLevelChangeRequestEventHandler(OnControlLevelChangeRequest);

            m_pRdpSession.Open();
            IRDPSRAPIInvitation pInvitation = m_pRdpSession.Invitations.CreateInvitation("DesktopShareServer", "Internal", "", 5);
            string invitationString = pInvitation.ConnectionString;

            Msender.SendMessage(invitationString, MessageType.DesktopShare);
            desktopshared = true;

        }

        void OnAttendeeDisconnected(object pDisconnectInfo)
        {
            IRDPSRAPIAttendeeDisconnectInfo pDiscInfo = pDisconnectInfo as IRDPSRAPIAttendeeDisconnectInfo;

        }

        void OnControlLevelChangeRequest(object pObjAttendee, CTRL_LEVEL RequestedLevel)
        {
            IRDPSRAPIAttendee pAttendee = pObjAttendee as IRDPSRAPIAttendee;
            pAttendee.ControlLevel = RequestedLevel;
        }


        private void OnAttendeeConnected(object pObjAttendee)
        {
            IRDPSRAPIAttendee pAttendee = pObjAttendee as IRDPSRAPIAttendee;

            pAttendee.ControlLevel = CTRL_LEVEL.CTRL_LEVEL_VIEW;
            //pAttendee.ControlLevel = CTRL_LEVEL.CTRL_LEVEL_MAX;

        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            btn_connect_Click(sender, e);
        }

        private void exitToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            MADMeetingUI_FormClosing(sender,null);
            Application.Exit();
            
        }

        private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("No Idea What to put Here.....","MAD Meeting",MessageBoxButtons.OK,MessageBoxIcon.Information);
        }

        private void optionsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Will be Added Soon","MAD Meeting",MessageBoxButtons.OK,MessageBoxIcon.Information);
        }

    }

    public class LoggedUserClass
    {
        public Person User;
        public String status;

        public LoggedUserClass(Person user, String sstatus)
        {
            User = user;
            status = sstatus;
        }
    }
}

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
Technical Lead KLA-Tencor
India India
Working in KLA-Tencor, Chennai as Technical Lead. Born in Bapatla, Guntur (dt), Andhra Pradesh. B.Tech from Bapatla Engineering College, M.Tech from IIT Kanpur.

Interesting areas include Image Processing, C# .NET.

Comments and Discussions