using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using Misuzilla.Applications.TwitterIrcGateway.Authentication;
using Misuzilla.Net.Irc;
namespace Misuzilla.Applications.TwitterIrcGateway
{
///
/// TwitterIrcGatewayへのクライアントの接続を表すクラスです。
///
public class Connection : ConnectionBase
{
///
/// Twitter上のユーザを取得します。
///
public User TwitterUser { get; private set; }
public TwitterIdentity Identity { get; private set; }
public Boolean IsOAuthSettingMode { get; set; }
public Connection(Server server, TcpClient tcpClient) : base(server, tcpClient)
{
_Counter.Increment(ref _Counter.Connection);
}
~Connection()
{
_Counter.Decrement(ref _Counter.Connection);
}
protected override AuthenticateResult OnAuthenticate(UserInfo userInfo)
{
try
{
AuthenticateResult authResult = CurrentServer.Authentication.Authenticate(CurrentServer, this, userInfo);
TwitterAuthenticateResult twitterAuthResult = authResult as TwitterAuthenticateResult;
if (twitterAuthResult != null && authResult.IsAuthenticated)
{
TwitterUser = twitterAuthResult.User;
Identity = twitterAuthResult.Identity;
}
if (authResult is OAuthContinueAuthenticationResult)
IsOAuthSettingMode = true;
return authResult;
}
catch (Exception ex)
{
SendServerErrorMessage(ex.Message);
return new AuthenticateResult(ErrorReply.ERR_PASSWDMISMATCH, "Password Incorrect");
}
}
protected override void OnAuthenticateSucceeded()
{
SessionBase session;
if (IsOAuthSettingMode)
{
// OAuth Setting Mode
session = CurrentServer.GetOrCreateSession(Guid.NewGuid().ToString(), (server, sessionId) => new OAuthSettingSession(sessionId, server));
}
else
{
// Authenticated
session = CurrentServer.GetOrCreateSession(TwitterUser);
}
session.Attach(this);
}
protected override void OnAuthenticateFailed(AuthenticateResult authenticateResult)
{
}
}
}