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;
}
}
}