8,757
社区成员
发帖
与我相关
我的任务
分享
//绑定数据
public void CreatServerList()
{
Utility.parseServerList("ClientServerList.xml");
shareData = ShareData.getInstace();
servercontentlist = shareData.servercontentlist;
for (int i = 0; i < servercontentlist.ToArray().Length; i++)
{
Items.Add(new Item
{
lbserverlisten = @"Resources\disconnect.png",
lbcomputer = @"Resources\image_computer.png",
lbid = servercontentlist[i].id,
lbservername = servercontentlist[i].servername,
lbserverip = "Address:" + servercontentlist[i].serverip,
lbserverport = "PORT:" + servercontentlist[i].serverport,
lbedit = @"Resources\edit_computer.png",
lbdelete = @"Resources\remove.png"
});
this.serverlistview.ItemsSource = Items;
}
ContentStatus();
}
//判断状态的函数
public void ContentStatus()
{
mySocket = new MySocket(this);
for (int i = 0; i < Items.ToArray().Length; i++)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
DateTime dateStart = DateTime.Now;
bool statubool = mySocket.StatusConnect(servercontentlist[i].serverip.ToString(), servercontentlist[i].serverport);
if (statubool)
{
if (status.Equals("OK"))
{
stopwatch.Stop();
TimeSpan span = DateTime.Now - dateStart;
connecttimer = span.TotalMilliseconds;
if (connecttimer > statutimer)
{ //响应OK时间超过我预定的时间 绑定成忙的颜色
Items[i].lbserverlisten = @"Resources\busy.png";
}
else
{
Items[i].lbserverlisten = @"Resources\connect.png";
}
}
else if (status.Equals("Busy"))
{ //响应的是busy的消息,显示忙碌
stopwatch.Stop();
Items[i].lbserverlisten = @"Resources\busy.png";
}
else
{
}
}
else
{ //socket没连接上,显示不可连接状态。
Items[i].lbserverlisten = @"Resources\disconnect.png";
}
this.serverlistview.ItemsSource = Items;
mySocket.closeClientSocket();
}
}


MySocket类
public bool StatusConnect(string ip, int port)
{
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(ip), port);
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
clientSocket.Connect(ipep);
Command command = new Command();
command.SequenceNo = 2;
string m_content = "Ping";
command.Content = m_content;
command.Lenght = m_content.Length;
send(command);
[color=#99CC00][color=#FFCC00]ThreadStart receiveDelegate = new ThreadStart(onReceive);[/color]
receiveThread = new Thread(receiveDelegate);
receiveThread.Start();[/color]
return true;
}
catch (SocketException)
{
return false;
}
private void onReceive()
{
string fileName = "clientUI.xml";
FileStream fileStream = new FileStream(fileName, FileMode.Create);
int readSize = -1;
while (true)
{
byte[] recBuf = new byte[4096 * 2];
MemoryStream ms = new MemoryStream();
try
{
if (clientSocket != null)
{
readSize = clientSocket.Receive(recBuf, recBuf.Length, 0);
if (readSize > 0)
{
ms.Write(recBuf, 0, readSize);
}
}
else {
MessageBox.Show("The connection is broken!!!");
}
}
catch (ArgumentNullException e)
{
MessageBox.Show(e + "");
}
catch (ArgumentOutOfRangeException e)
{
MessageBox.Show(e + "");
}
if (ms.Length > 0)
{
byte[] rBuf = ms.ToArray();
Position position = new Position();
Command command = Utility.parseData(rBuf, position);
string content = command.Content;
string[] scontent = content.Split(':');
if (scontent[0].Equals("LoginResult"))
{
if (scontent[1].Equals("True"))
{
Command m_command = new Command();
command.SequenceNo = 1;
string m_content = "GetClientUI:";
command.Content = m_content;
command.Lenght = content.Length;
send(command);
}
else
{
}
}
else if (scontent[0].Equals("ClientUIResult"))
{
string data = scontent[1];
byte[] writeBuf = Encoding.UTF8.GetBytes(data);
try
{
fileStream.Write(writeBuf, 0, writeBuf.Length);
fileStream.Flush();
fileStream.Close();
Utility.parseGUI("clientUI.xml");
showOperatWindow = showMain;
dispatcher.BeginInvoke(showOperatWindow);
}
catch (Exception e)
{
MessageBox.Show("error:" + e);
}
}
else if (scontent[0].Equals("PingResponse"))
{
if (scontent[1].Equals("OK"))
{
//把这个状态string值传给serverlist窗体里的值 每次报错都在这里说没有实例化对象
[color=#FF0000]m_main.ContentStatus(scontent[1]);
}
else if (scontent[1].Equals("Busy"))
{
m_main.ContentStatus(scontent[1]);
}
else
{
}[/color]
}
}
}
public void CreatServerList()
{
Utility.parseServerList("ClientServerList.xml");
shareData = ShareData.getInstace();
servercontentlist = shareData.servercontentlist;
for (int i = 0; i < servercontentlist.ToArray().Length; i++)
{
Items.Add(new Item
{
lbserverlisten = @"Resources\disconnect.png",
lbcomputer = @"Resources\image_computer.png",
lbid = servercontentlist[i].id,
lbservername = servercontentlist[i].servername,
lbserverip = "Address:" + servercontentlist[i].serverip,
lbserverport = "PORT:" + servercontentlist[i].serverport,
lbedit = @"Resources\edit_computer.png",
lbdelete = @"Resources\remove.png"
});
this.serverlistview.ItemsSource = Items;
}
ContentStatus();
}
public ServerListWindow()
{
InitializeComponent();
slManager = new ServerListManager();
slWindow = this;
statutimer = Utility.parseAppConfig("ApplictionConfig.xml");
mySocket = new MySocket(slWindow);
CreatServerList();
ThreadStart receiveDelegate = new ThreadStart(ContentStatus);
connetServerThread = new Thread(receiveDelegate);
connetServerThread.Start();
// GoFullScreen();
}
public void CreatServerList()
{
Utility.parseServerList("ClientServerList.xml");
shareData = ShareData.getInstace();
servercontentlist = shareData.servercontentlist;
for (int i = 0; i < servercontentlist.ToArray().Length; i++)
{
Items.Add(new Item
{
lbserverlisten = @"Resources\disconnect.png",
lbcomputer = @"Resources\image_computer.png",
lbid = servercontentlist[i].id,
lbservername = servercontentlist[i].servername,
lbserverip = "Address:" + servercontentlist[i].serverip,
lbserverport = "PORT:" + servercontentlist[i].serverport,
lbedit = @"Resources\edit_computer.png",
lbdelete = @"Resources\remove.png"
});
this.serverlistview.ItemsSource = Items;
}
}
public void ContentStatus()
{
mySocket = new MySocket(this);
for (int i = 0; i < Items.ToArray().Length; i++)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
DateTime dateStart = DateTime.Now;
string serverStatu= mySocket.StatusConnect(servercontentlist[i].serverip.ToString(), servercontentlist[i].serverport);
if (serverStatu.Equals("OK"))
{
stopwatch.Stop();
TimeSpan span = DateTime.Now - dateStart;
connecttimer = span.TotalMilliseconds;
if (connecttimer > statutimer)
{
Items[i].lbserverlisten = @"Resources\busy.png";
}
else
{
Items[i].lbserverlisten = @"Resources\connect.png";
}
}
else if (serverStatu.Equals("Busy"))
{
stopwatch.Stop();
Items[i].lbserverlisten = @"Resources\busy.png";
}
else if (serverStatu.Equals("NO"))
{
stopwatch.Stop();
Items[i].lbserverlisten = @"Resources\disconnect.png";
}
this.serverlistview.ItemsSource = Items;//报错
//The calling thread cannot access this object because a different thread owns it.
mySocket.closeClientSocket();
}
}
private ServerListWindow m_main = null;
public MySocket(ServerListWindow main)
{
dispatcher = main.Dispatcher;
m_main = main;
m_mySocket = this;
}