using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Net.Sockets; using Misuzilla.Net.Irc; namespace Misuzilla.Applications.TwitterIrcGateway { /// /// IRCメッセージ受信時イベントのデータを提供します。 /// public class MessageReceivedEventArgs : CancelableEventArgs { /// /// 受信したIRCメッセージを取得します /// public IRCMessage Message { get; set; } /// /// クライアントへの接続を取得します /// public TcpClient Client { get; private set; } /// /// クライアントへの出力のためのStreamWriterを取得します /// public StreamWriter Writer { get; private set; } public MessageReceivedEventArgs(IRCMessage msg, StreamWriter sw, TcpClient tcpClient) { Writer = sw; Client = tcpClient; Message = msg; } } /// /// セッションが開始時イベントのデータを提供します。 /// public class SessionStartedEventArgs : EventArgs { /// /// 接続してきたユーザの名前を取得します。 /// public String UserName { get; set; } /// /// Twitterのユーザを取得します。 /// public User User { get; set; } /// /// 接続してきたユーザのエンドポイントを取得します。 /// public IPEndPoint EndPoint { get; set; } public SessionStartedEventArgs(String userName, User user, IPEndPoint endPoint) { UserName = userName; User = user; EndPoint = endPoint; } } /// /// 接続をセッションにアタッチしたイベントのデータを提供します /// public class ConnectionAttachEventArgs : EventArgs { /// /// 新たにアタッチされた接続 /// public ConnectionBase Connection { get; set; } } /// /// キャンセル可能なイベントのデータを提供します。 /// public abstract class CancelableEventArgs : EventArgs { /// /// 処理をキャンセルするかどうかを取得・設定します /// public Boolean Cancel { get; set; } } /// /// タイムラインステータス一覧を取得したイベントのデータを提供します。 /// public class TimelineStatusesEventArgs : CancelableEventArgs { /// /// ステータス一覧を取得します。 /// public Statuses Statuses { get; private set; } /// /// 初回アクセスかどうかを取得します。 /// public Boolean IsFirstTime { get; set; } public TimelineStatusesEventArgs(Statuses statuses, Boolean isFirstTime) { Statuses = statuses; IsFirstTime = isFirstTime; } } /// /// タイムラインステータスを処理するイベントのデータを提供します。 /// public class TimelineStatusEventArgs : CancelableEventArgs { /// /// 受け取ったステータスを取得します /// public Status Status { get; private set; } /// /// これからクライアントに送ろうとしている本文を取得・設定します /// public String Text { get; set; } /// /// クライアントに送信するIRCメッセージの種類を取得・設定します /// public String IRCMessageType { get; set; } public TimelineStatusEventArgs(Status status) : this(status, status.Text, "") { } public TimelineStatusEventArgs(Status status, String text, String ircMessageType) { Status = status; Text = text; IRCMessageType = ircMessageType; } } /// /// ステータスをクライアントから更新したイベントのデータを提供します。 /// public class StatusUpdateEventArgs : CancelableEventArgs { /// /// クライアントから受け取ったIRCメッセージを取得します。タイミングや呼び出し元によってはnullになります。 /// public PrivMsgMessage ReceivedMessage { get; set; } /// /// 更新するのに利用するテキストを取得・設定します /// public String Text { get; set; } /// /// 返信先のステータスのIDを指定します。0を指定すると返信先を指定しなかったことになります。 /// public Int64 InReplyToStatusId { get; set; } /// /// ステータスを更新してその結果のステータスを取得します。更新完了時のイベントでのみ利用できます。 /// public Status CreatedStatus { get; set; } public StatusUpdateEventArgs(String text, Int64 inReplyToStatusId) { Text = text; InReplyToStatusId = inReplyToStatusId; } public StatusUpdateEventArgs(PrivMsgMessage receivedMessage, String text) { ReceivedMessage = receivedMessage; Text = text; } } /// /// メッセージの送信先を決定したイベントのデータを提供します。 /// public class TimelineStatusRoutedEventArgs : EventArgs { /// /// ステータスを取得します /// public Status Status { get; private set; } /// /// メッセージの本文を取得します /// public String Text { get; private set; } /// /// 決定された送信先のリストを取得します。このリストに追加または削除することで送信先を変更できます。 /// public List RoutedGroups { get; private set; } public TimelineStatusRoutedEventArgs(Status status, String text, List routedGroups) { Status = status; Text = text; RoutedGroups = routedGroups; } } /// /// メッセージを各グループに送信するイベントのデータを提供します。 /// public class TimelineStatusGroupEventArgs : TimelineStatusEventArgs { /// /// 送信対象となるグループを取得します /// public Group Group { get; private set; } public TimelineStatusGroupEventArgs(Status status, String text, String ircMessageType, Group group) : base(status, text, ircMessageType) { Group = group; } } }