📄 mainthread.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Net.Sockets;
using System.Collections;
using System.Data;
using CommonClassLibrary;
using System.Net;
namespace PlayCardServer
{
public class MainThread
{
private Thread serverThread;
private TcpListener serverListener;
private Dictionary<string, Client> clientTable;
public MainThread()
{
clientTable = new Dictionary<string, Client>();
serverThread = new Thread(new ThreadStart(startListen));
serverThread.Start();
AddLog("Socket Server Started");
}
public void startListen()
{
try
{
//Start the tcpListner
serverListener = new TcpListener(5151);
serverListener.Start();
do
{
//Create a new class when a new Chat Client connects
Client newClient = new Client(serverListener.AcceptTcpClient());
newClient.Connected += OnConnected;
newClient.Disconnected += OnDisconnected;
newClient.MessageReceived += OnMessageReceived;
//Connect to the clients
newClient.Connect();
}
while (true);
}
catch(Exception ex)
{
AddLog("Error: " + ex.Message);
serverListener.Stop();
}
}
public void OnConnected(object sender, EventArgs e)
{
//Get the client that raised the event
Client temp = (Client)sender;
//Add the client to the Hashtable
clientTable.Add(temp.UserID, temp);
AddLog("Client Connected:" + temp.UserID);
}
public void OnDisconnected(object sender, EventArgs e)
{
//Get the Client that raised the Event
Client temp = (Client)sender;
DB.UpdateStatus(temp.UserID, "0");
//If the Client exists in the Hashtable
if (clientTable.ContainsKey(temp.UserID))
{
AddLog("Client Disconnected:" + temp.UserID);
//Remove the client from the hashtable
clientTable.Remove(temp.UserID);
//Remove the client from the ClientList class
DataRow findRow = ClientList.Instance().FindUserRow(temp.UserID);
ClientList.Instance().RemoveClient(temp.UserID);
Disconnect u = new Disconnect();
u.Protocol = "510";
u.UserID = temp.UserID;
byte[] message = SerializationFormatter.GetSerializationBytes(u);
Client tempClient;
DataTable dt = ClientList.Instance().GetUserList();
foreach (DataRow row in dt.Rows)
{
string uid = (string)row["UserID"];
tempClient = (Client)clientTable[uid];
tempClient.Send(message);
}
}
}
public void OnMessageReceived(object sender, MessageEventArgs e)
{
//Message sender client
Client temp = (Client)sender;
AddLog(temp.UserName + " :" + e.Message);
ChatMessage chat = new ChatMessage();
chat.Protocol = "504";
chat.UserName = temp.UserName;
chat.Message = e.Message;
byte[] message = SerializationFormatter.GetSerializationBytes(chat);
Client tempClient;
DataTable dt = ClientList.Instance().GetUserList();
foreach (DataRow row in dt.Rows)
{
string uid = (string)row["UserID"];
tempClient = (Client)clientTable[uid];
tempClient.Send(message);
}
}
private void AddLog(string msg)
{
Console.WriteLine(msg);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -