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