⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainthread.cs

📁 包包版网络游戏大厅和网络桥牌系统
💻 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 + -