You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
364 lines
14 KiB
C#
364 lines
14 KiB
C#
10 years ago
|
//-----------------------------------------------------------------------------
|
||
|
// File: DPlayConnect_CreateForm.cs
|
||
|
//
|
||
|
// Desc: Application class for the DirectPlay samples framework.
|
||
|
//
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Windows.Forms;
|
||
|
using Microsoft.DirectX;
|
||
|
using Microsoft.DirectX.DirectPlay;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// This form will allow you to create a new session, and set certain properties
|
||
|
/// of the session.
|
||
|
/// </summary>
|
||
|
public class CreateSessionForm : System.Windows.Forms.Form
|
||
|
{
|
||
|
private Peer peer;
|
||
|
private ConnectWizard connectionWizard;
|
||
|
private Address deviceAddress;
|
||
|
|
||
|
private System.Windows.Forms.Button btnOK;
|
||
|
private System.Windows.Forms.TextBox txtSession;
|
||
|
private System.Windows.Forms.Label label1;
|
||
|
private System.Windows.Forms.GroupBox groupBox1;
|
||
|
private System.Windows.Forms.RadioButton notSignedRadio;
|
||
|
private System.Windows.Forms.RadioButton fullSignedRadio;
|
||
|
private System.Windows.Forms.RadioButton fastSignedRadio;
|
||
|
private System.Windows.Forms.CheckBox migrateHostCheckBox;
|
||
|
private System.Windows.Forms.CheckBox useDPNSVRCheckBox;
|
||
|
private System.Windows.Forms.TextBox localPortTextBox;
|
||
|
private System.Windows.Forms.Label localPortLabel;
|
||
|
private System.Windows.Forms.Button btnCancel;
|
||
|
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// Constructor
|
||
|
/// </summary>
|
||
|
public CreateSessionForm(Peer peerObject, Address addressObject, ConnectWizard connectionWizard)
|
||
|
{
|
||
|
//
|
||
|
// Required for Windows Form Designer support
|
||
|
//
|
||
|
InitializeComponent();
|
||
|
|
||
|
peer = peerObject;
|
||
|
this.connectionWizard = connectionWizard;
|
||
|
deviceAddress = addressObject;
|
||
|
txtSession.Text = null;
|
||
|
this.Text = connectionWizard.SampleName + " - " + this.Text;
|
||
|
//Get the default session from the registry if it exists
|
||
|
Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay");
|
||
|
if (regKey != null)
|
||
|
{
|
||
|
// Get session name
|
||
|
txtSession.Text = (string)regKey.GetValue("DirectPlaySessionName", null);
|
||
|
|
||
|
// Get host migration option
|
||
|
if (regKey.GetValue("DirectPlayMigrateHost",null) != null)
|
||
|
{
|
||
|
migrateHostCheckBox.Checked = ((int)regKey.GetValue("DirectPlayMigrateHost",1)==1);
|
||
|
}
|
||
|
|
||
|
|
||
|
// Get session signing option
|
||
|
if (regKey.GetValue("DirectPlaySessionSigning",null) != null)
|
||
|
{
|
||
|
if ("Full" == (string)regKey.GetValue("DirectPlaySessionSigning",null))
|
||
|
fullSignedRadio.Checked = true;
|
||
|
else if ("Fast" == (string)regKey.GetValue("DirectPlaySessionSigning",null))
|
||
|
fastSignedRadio.Checked = true;
|
||
|
else
|
||
|
notSignedRadio.Checked = true;
|
||
|
}
|
||
|
|
||
|
regKey.Close();
|
||
|
}
|
||
|
|
||
|
// Set default port value and hide port UI if provider doesn't use them
|
||
|
Port = connectionWizard.DefaultPort;
|
||
|
if (!ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider))
|
||
|
{
|
||
|
localPortTextBox.Hide();
|
||
|
localPortLabel.Hide();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// The port on which to host
|
||
|
/// </summary>
|
||
|
public int Port
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
int port = 0;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
port = int.Parse(localPortTextBox.Text);
|
||
|
}
|
||
|
catch {}
|
||
|
|
||
|
return port;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
if( value > 0 )
|
||
|
localPortTextBox.Text = value.ToString();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// Clean up any resources being used.
|
||
|
/// </summary>
|
||
|
protected override void Dispose(bool Disposing)
|
||
|
{
|
||
|
base.Dispose(Disposing);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#region Windows Form Designer generated code
|
||
|
/// <summary>
|
||
|
/// Required method for Designer support - do not modify
|
||
|
/// the contents of this method with the code editor.
|
||
|
/// </summary>
|
||
|
private void InitializeComponent()
|
||
|
{
|
||
|
this.txtSession = new System.Windows.Forms.TextBox();
|
||
|
this.label1 = new System.Windows.Forms.Label();
|
||
|
this.btnOK = new System.Windows.Forms.Button();
|
||
|
this.btnCancel = new System.Windows.Forms.Button();
|
||
|
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||
|
this.fullSignedRadio = new System.Windows.Forms.RadioButton();
|
||
|
this.fastSignedRadio = new System.Windows.Forms.RadioButton();
|
||
|
this.notSignedRadio = new System.Windows.Forms.RadioButton();
|
||
|
this.migrateHostCheckBox = new System.Windows.Forms.CheckBox();
|
||
|
this.useDPNSVRCheckBox = new System.Windows.Forms.CheckBox();
|
||
|
this.localPortLabel = new System.Windows.Forms.Label();
|
||
|
this.localPortTextBox = new System.Windows.Forms.TextBox();
|
||
|
this.groupBox1.SuspendLayout();
|
||
|
this.SuspendLayout();
|
||
|
//
|
||
|
// txtSession
|
||
|
//
|
||
|
this.txtSession.Location = new System.Drawing.Point(96, 24);
|
||
|
this.txtSession.Name = "txtSession";
|
||
|
this.txtSession.Size = new System.Drawing.Size(176, 20);
|
||
|
this.txtSession.TabIndex = 3;
|
||
|
this.txtSession.Text = "";
|
||
|
//
|
||
|
// label1
|
||
|
//
|
||
|
this.label1.Location = new System.Drawing.Point(16, 28);
|
||
|
this.label1.Name = "label1";
|
||
|
this.label1.Size = new System.Drawing.Size(288, 12);
|
||
|
this.label1.TabIndex = 2;
|
||
|
this.label1.Text = "Session Name:";
|
||
|
//
|
||
|
// btnOK
|
||
|
//
|
||
|
this.btnOK.Location = new System.Drawing.Point(128, 168);
|
||
|
this.btnOK.Name = "btnOK";
|
||
|
this.btnOK.Size = new System.Drawing.Size(74, 27);
|
||
|
this.btnOK.TabIndex = 0;
|
||
|
this.btnOK.Text = "OK";
|
||
|
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
|
||
|
//
|
||
|
// btnCancel
|
||
|
//
|
||
|
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||
|
this.btnCancel.Location = new System.Drawing.Point(208, 168);
|
||
|
this.btnCancel.Name = "btnCancel";
|
||
|
this.btnCancel.Size = new System.Drawing.Size(74, 27);
|
||
|
this.btnCancel.TabIndex = 1;
|
||
|
this.btnCancel.Text = "Cancel";
|
||
|
//
|
||
|
// groupBox1
|
||
|
//
|
||
|
this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] {
|
||
|
this.fullSignedRadio,
|
||
|
this.fastSignedRadio,
|
||
|
this.notSignedRadio});
|
||
|
this.groupBox1.Location = new System.Drawing.Point(16, 64);
|
||
|
this.groupBox1.Name = "groupBox1";
|
||
|
this.groupBox1.Size = new System.Drawing.Size(112, 88);
|
||
|
this.groupBox1.TabIndex = 10;
|
||
|
this.groupBox1.TabStop = false;
|
||
|
this.groupBox1.Text = "Session Signing";
|
||
|
//
|
||
|
// fullSignedRadio
|
||
|
//
|
||
|
this.fullSignedRadio.Location = new System.Drawing.Point(18, 22);
|
||
|
this.fullSignedRadio.Name = "fullSignedRadio";
|
||
|
this.fullSignedRadio.Size = new System.Drawing.Size(80, 16);
|
||
|
this.fullSignedRadio.TabIndex = 9;
|
||
|
this.fullSignedRadio.Text = "Full signed";
|
||
|
//
|
||
|
// fastSignedRadio
|
||
|
//
|
||
|
this.fastSignedRadio.Checked = true;
|
||
|
this.fastSignedRadio.Location = new System.Drawing.Point(18, 41);
|
||
|
this.fastSignedRadio.Name = "fastSignedRadio";
|
||
|
this.fastSignedRadio.Size = new System.Drawing.Size(88, 16);
|
||
|
this.fastSignedRadio.TabIndex = 8;
|
||
|
this.fastSignedRadio.TabStop = true;
|
||
|
this.fastSignedRadio.Text = "Fast signed";
|
||
|
//
|
||
|
// notSignedRadio
|
||
|
//
|
||
|
this.notSignedRadio.Location = new System.Drawing.Point(18, 55);
|
||
|
this.notSignedRadio.Name = "notSignedRadio";
|
||
|
this.notSignedRadio.Size = new System.Drawing.Size(72, 24);
|
||
|
this.notSignedRadio.TabIndex = 10;
|
||
|
this.notSignedRadio.Text = "Disabled";
|
||
|
//
|
||
|
// migrateHostCheckBox
|
||
|
//
|
||
|
this.migrateHostCheckBox.Checked = true;
|
||
|
this.migrateHostCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
|
||
|
this.migrateHostCheckBox.Location = new System.Drawing.Point(144, 64);
|
||
|
this.migrateHostCheckBox.Name = "migrateHostCheckBox";
|
||
|
this.migrateHostCheckBox.Size = new System.Drawing.Size(136, 24);
|
||
|
this.migrateHostCheckBox.TabIndex = 11;
|
||
|
this.migrateHostCheckBox.Text = "Enable Host Migration";
|
||
|
//
|
||
|
// useDPNSVRCheckBox
|
||
|
//
|
||
|
this.useDPNSVRCheckBox.Location = new System.Drawing.Point(144, 84);
|
||
|
this.useDPNSVRCheckBox.Name = "useDPNSVRCheckBox";
|
||
|
this.useDPNSVRCheckBox.Size = new System.Drawing.Size(136, 24);
|
||
|
this.useDPNSVRCheckBox.TabIndex = 12;
|
||
|
this.useDPNSVRCheckBox.Text = "Use DPNSVR";
|
||
|
//
|
||
|
// localPortLabel
|
||
|
//
|
||
|
this.localPortLabel.Location = new System.Drawing.Point(152, 122);
|
||
|
this.localPortLabel.Name = "localPortLabel";
|
||
|
this.localPortLabel.Size = new System.Drawing.Size(64, 17);
|
||
|
this.localPortLabel.TabIndex = 13;
|
||
|
this.localPortLabel.Text = "Local Port:";
|
||
|
//
|
||
|
// localPortTextBox
|
||
|
//
|
||
|
this.localPortTextBox.Location = new System.Drawing.Point(216, 120);
|
||
|
this.localPortTextBox.Name = "localPortTextBox";
|
||
|
this.localPortTextBox.Size = new System.Drawing.Size(56, 20);
|
||
|
this.localPortTextBox.TabIndex = 14;
|
||
|
this.localPortTextBox.Text = "";
|
||
|
//
|
||
|
// CreateSessionForm
|
||
|
//
|
||
|
this.AcceptButton = this.btnOK;
|
||
|
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
|
||
|
this.CancelButton = this.btnCancel;
|
||
|
this.ClientSize = new System.Drawing.Size(290, 200);
|
||
|
this.ControlBox = false;
|
||
|
this.Controls.AddRange(new System.Windows.Forms.Control[] {
|
||
|
this.localPortTextBox,
|
||
|
this.localPortLabel,
|
||
|
this.useDPNSVRCheckBox,
|
||
|
this.migrateHostCheckBox,
|
||
|
this.txtSession,
|
||
|
this.label1,
|
||
|
this.groupBox1,
|
||
|
this.btnOK,
|
||
|
this.btnCancel});
|
||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||
|
this.HelpButton = true;
|
||
|
this.MaximizeBox = false;
|
||
|
this.MinimizeBox = false;
|
||
|
this.Name = "CreateSessionForm";
|
||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||
|
this.Text = "Create a Session";
|
||
|
this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.CreateSessionForm_HelpRequested);
|
||
|
this.groupBox1.ResumeLayout(false);
|
||
|
this.ResumeLayout(false);
|
||
|
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// We are ready to create a session. Ensure the data is valid
|
||
|
/// then create the session
|
||
|
/// </summary>
|
||
|
private void btnOK_Click(object sender, System.EventArgs e)
|
||
|
{
|
||
|
ApplicationDescription dpApp;
|
||
|
if ((txtSession.Text == null) || (txtSession.Text == ""))
|
||
|
{
|
||
|
MessageBox.Show(this,"Please enter a session name before clicking OK.","No sessionname",MessageBoxButtons.OK,MessageBoxIcon.Information);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\DirectX\\SDK\\csDPlay");
|
||
|
if (regKey != null)
|
||
|
{
|
||
|
regKey.SetValue("DirectPlaySessionName", txtSession.Text);
|
||
|
if (migrateHostCheckBox.Checked)
|
||
|
regKey.SetValue("DirectPlayMigrateHost",1);
|
||
|
else
|
||
|
regKey.SetValue("DirectPlayMigrateHost",0);
|
||
|
|
||
|
if (fastSignedRadio.Checked)
|
||
|
regKey.SetValue("DirectPlaySessionSigning","Fast");
|
||
|
else if (fullSignedRadio.Checked)
|
||
|
regKey.SetValue("DirectPlaySessionSigning","Full");
|
||
|
else
|
||
|
regKey.SetValue("DirectPlaySessionSigning","Disabled");
|
||
|
regKey.Close();
|
||
|
}
|
||
|
|
||
|
dpApp = new ApplicationDescription();
|
||
|
dpApp.GuidApplication = connectionWizard.ApplicationGuid;
|
||
|
dpApp.SessionName = txtSession.Text;
|
||
|
dpApp.Flags = 0;
|
||
|
|
||
|
if (migrateHostCheckBox.Checked)
|
||
|
dpApp.Flags |= SessionFlags.MigrateHost;
|
||
|
|
||
|
if (!useDPNSVRCheckBox.Checked)
|
||
|
dpApp.Flags |= SessionFlags.NoDpnServer;
|
||
|
|
||
|
if (fastSignedRadio.Checked)
|
||
|
dpApp.Flags |= SessionFlags.FastSigned;
|
||
|
else if (fullSignedRadio.Checked)
|
||
|
dpApp.Flags |= SessionFlags.FullSigned;
|
||
|
|
||
|
// Specify the port number if available
|
||
|
if (ConnectWizard.ProviderRequiresPort(deviceAddress.ServiceProvider))
|
||
|
{
|
||
|
if (Port > 0)
|
||
|
deviceAddress.AddComponent(Address.KeyPort, Port);
|
||
|
}
|
||
|
|
||
|
connectionWizard.SetUserInfo();
|
||
|
// Host a game on deviceAddress as described by dpApp
|
||
|
// HostFlags.OkToQueryForAddressing allows DirectPlay to prompt the user
|
||
|
// using a dialog box for any device address information that is missing
|
||
|
peer.Host(dpApp,deviceAddress,HostFlags.OkToQueryForAddressing);
|
||
|
this.DialogResult = DialogResult.OK;
|
||
|
}
|
||
|
|
||
|
private void CreateSessionForm_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
}
|