首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 撰寫簡易聊天程式(六):Talker 核心類別實作與介面委派

     編輯:關於C語言

Talker 類別

public class Talker
{
    private IMessageReceiver receiver;
    private IMessageSender sender;

    public Talker(IMessageReceiver receiver, IMessageSender sender)
    {
        this.receiver = receiver; this.sender = sender;
    }
    public Talker()
    {
        this.receiver = new MessageReceiver();
        this.sender = new MessageSender();
    }

    // 事件轉發
    public event MessageReceivedEventHandler MessageReceived
    {
        add { receiver.MessageReceived += value; }
        remove { receiver.MessageReceived -= value; }
    }
    public event ClientConnectedEventHandler ClientConnected
    {
        add { receiver.ClientConnected += value; }
        remove { receiver.ClientConnected -= value; }
    }
    public event ConnectionLostEventHandler ClientLost
    {
        add { receiver.ClientLost += value; }
        remove { receiver.ClientLost -= value; }
    }
    public event PortNumberReadyEventHandler PortNumberReady
    {
        add { ((MessageReceiver)receiver).PortNumberReady += value; }
        remove { ((MessageReceiver)receiver).PortNumberReady -= value; }
    }

    public bool ConnectByHost(string host, int port)
    {
        IPAddress[] ips = Dns.GetHostAddresses(host);
        return sender.Connect(ips[0], port);
    }
    public bool ConnectByIp(string ip, int port)
    {
        if (!IPAddress.TryParse(ip, out IPAddress addr)) return false;
        return sender.Connect(addr, port);
    }
    public bool SendMessage(Message msg) => sender.SendMessage(msg);
    public void Dispose() { try { sender.SignOut(); receiver.StopListen(); } catch { } }
    public void SignOut() { try { sender.SignOut(); } catch { } }
}

Talker 封裝收發介面,透過事件轉發與方法委派達成解耦,未來更換實作無須修改 UI 程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved