📄 mainform.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using CommonClassLibrary;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace PlayCardClient
{
public delegate void DisplayMessage(string msg);
public partial class MainForm : Form
{
private TcpClient Client;
private byte[] recByte;
private SplitBytes sb;
public MainForm()
{
InitializeComponent();
}
private void btnSend_Click(object sender, EventArgs e)
{
if (txtMessage.Text.Trim() != "")
{
ChatMessage u = new ChatMessage();
u.Protocol = "503";
u.Message = txtMessage.Text.Trim();
SendText(SerializationFormatter.GetSerializationBytes(u));
txtMessage.Text = "";
}
}
private void GetMsg(IAsyncResult ar)
{
int numberOfBytesRead;
lock (Client.GetStream())
{
numberOfBytesRead = Client.GetStream().EndRead(ar);
if (numberOfBytesRead < 1)
{
//If a value less than 1 received that means that client disconnected
Disconnect();
MessageBox.Show("Disconnected!!");
return;
}
}
sb.AddBytes(recByte, numberOfBytesRead);
recByte = new byte[1024];
if (Client.GetStream().DataAvailable)
{
Client.GetStream().BeginRead(recByte, 0, recByte.Length, new AsyncCallback(GetMsg), Client.GetStream());
}
else
{
BuildText(sb.ReceiveAllByte);
sb.Dispose();
lock (Client.GetStream())
{
AsyncCallback GetStreamMsgCallback = new AsyncCallback(GetMsg);
Client.GetStream().BeginRead(recByte, 0, 1024, GetStreamMsgCallback, this);
}
}
}
private void BuildText(byte[] dataByte)
{
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream(dataByte);
CommonProtocol obj = (CommonProtocol)formatter.Deserialize(stream);
stream.Close();
string Protocol = obj.Protocol;
switch (Protocol)
{
case "504": //按Hall发送Client的聊天信息
ChatMessage chat = (ChatMessage)obj;
string message = chat.UserName + " : " + chat.Message + "\r\n";
this.Invoke(new DisplayMessage(DisplayText), message);
break;
}
}
private void SendText(byte[] byteMessage)
{
BinaryWriter writer = new BinaryWriter(Client.GetStream()); ;
writer.Write(byteMessage);
writer.Flush();
}
private void DisplayText(string msg)
{
msgViewBox.Items.Add(msg);
}
private void Disconnect()
{
if (Client != null)
{
Client.Close();
Client = null;
}
}
private void MainForm_Load(object sender, EventArgs e)
{
Client = SocketHelper.Instance().Connection;
sb = new SplitBytes();
recByte = new byte[1024];
this.Text = "Chat Client :" + UserSettings.Instance.UserName;
DisplayText("Welcome " + UserSettings.Instance.UserName + "\r\n");
//Start Reading
AsyncCallback GetMsgCallback = new AsyncCallback(GetMsg);
(Client.GetStream()).BeginRead(recByte, 0, 1024, GetMsgCallback, this);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -