using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Threading;
using System.Windows.Media;
using System.Timers;
using System.Collections.Generic;
using Xenki.Framework;
namespace Xenki
{
///
/// Interaction logic for Page1.xaml
///
public partial class Mainform : Page
{
DefaultNetwork.NetworkControl network;
Timer messagetimer = new Timer(1000);
DefaultAgent.MessageChatManage messageManager;
public Mainform()
{
InitializeComponent();
recentTime = DateTime.Now;
CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
App.Current.Exit += Current_Exit;
Startup();
}
void Current_Exit(object sender, ExitEventArgs e)
{
network.Stop();
}
private void Startup()
{
try
{
debug("Creating renderer");
DefaultRenderer.DefaultRenderer xx = new DefaultRenderer.DefaultRenderer(m_viewport);
debug("Creating mesher");
xx.Mesher = new OpenMetaverse.Rendering.Meshmerizer();
debug("Creating network");
network = new DefaultNetwork.NetworkControl(xx);
network.OnConnected += new Xenki.DefaultNetwork.NetworkControl.Connected2Server(network_OnConnected);
network.OnLog += network_OnLog;
network.OnMessageChat += network_OnMessageChat;
messagetimer.Enabled = true;
messagetimer.Elapsed += new ElapsedEventHandler(messagetimer_Elapsed);
}
catch (Exception e)
{
debug("Graphics Error: " + e);
}
}
void network_OnConnected(OpenMetaverse.Simulator simulator)
{
messageDialog.Dispatcher.Invoke(
DispatcherPriority.Normal,
new System.Windows.Forms.MethodInvoker
(delegate
{
mainMenuGrid.Visibility = Visibility.Visible;
}));
}
void network_OnMessageChat(string msg)
{
messagetimer.Start();
messageDialog.Dispatcher.Invoke(
DispatcherPriority.Normal,
new System.Windows.Forms.MethodInvoker
(delegate
{
messageDialog.Visibility = Visibility.Visible;
if (messageDialog.Items.Count > 10)
messageDialog.Items.RemoveAt(0);
ListBoxItem item = new ListBoxItem();
item.Tag = DateTime.Now;
item.Content = msg;
messageDialog.Items.Add(item);
//messageDialog.ScrollIntoView(msg);
}
)
);
}
void messagetimer_Elapsed(object sender, ElapsedEventArgs e)
{
messageDialog.Dispatcher.Invoke(
DispatcherPriority.Normal,
new System.Windows.Forms.MethodInvoker
(delegate
{
if (messageDialog.Items.Count <= 0)
{
messageDialog.Visibility = Visibility.Hidden;
messagetimer.Stop();
return;
}
List delete = new List();
foreach (ListBoxItem item in messageDialog.Items)
{
DateTime came =(DateTime) item.Tag;
TimeSpan span = e.SignalTime.Subtract(came);
if (span.Seconds > References.EnvironmentSettings.MessageDisapearTimespan)
{
delete.Add(item);
}
}
delete.ForEach(delegate(ListBoxItem im)
{
messageDialog.Items.Remove(im);
});
}));
}
void network_OnLog(string msg)
{
debug(msg);
}
private void debug(string log)
{
logBox.Dispatcher.Invoke(
DispatcherPriority.Normal,
new System.Windows.Forms.MethodInvoker
(delegate
{
//ListBoxItem lbi = new ListBoxItem();
//lbi.Content = log;
if (logBox.Items.Count > 20)
logBox.Items.RemoveAt(0);
logBox.Items.Add(log);
//logBox.ScrollIntoView(lbi);
}
)
);
/*
frameRate.Dispatcher.Invoke(
DispatcherPriority.Normal,
new System.Windows.Forms.MethodInvoker
(delegate
{
}
)
);
*/
}
private void loginButton_Click(object sender, RoutedEventArgs e)
{
string user = loginUser.Text;
string last = loginLast.Text;
string pass = loginPass.Password;
try
{
debug("Starting network");
network.Start(user, last, pass);
}
catch (Exception ex)
{
debug("Network Error: " + ex);
}
loginGrid.Visibility = System.Windows.Visibility.Collapsed;
}
private static int frameCounter = 0;
private static DateTime recentTime;
void CompositionTarget_Rendering(object sender, EventArgs e)
{
frameCounter++;
if ((DateTime.Now - recentTime) > TimeSpan.FromSeconds(1))
{
frameRate.Dispatcher.Invoke(
DispatcherPriority.Normal,
new System.Windows.Forms.MethodInvoker
(delegate
{
frameRate.Content = "FPS: " + frameCounter;
frameCounter = 0;
recentTime = DateTime.Now;
}
)
);
}
}
private void btnmessage_Click(object sender, RoutedEventArgs e)
{
if (txtMessage.Text.Trim().Length > 0)
{
network.SendChatMessage(txtMessage.Text, 0, OpenMetaverse.ChatType.Normal);
txtMessage.Text = "";
}
}
private void txtMessage_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == System.Windows.Input.Key.Enter)
{
if (txtMessage.Text.Trim().Length > 0)
{
network.SendChatMessage(txtMessage.Text, 0, OpenMetaverse.ChatType.Normal);
txtMessage.Text = "";
e.Handled = true;
}
}
}
}
}