Changeset 373

Show
Ignore:
Timestamp:
04/15/08 00:23:42 (9 months ago)
Author:
tomoyo
Message:

とりあえず適当にモードを使うことで特定のチャンネルはエコーバックしないようにする機能を追加。

Location:
TwitterIrcGateway/TwitterIrcGatewayCore
Files:
2 added
3 modified

Legend:

Unmodified
Added
Removed
  • TwitterIrcGateway/TwitterIrcGatewayCore/Group.cs

    r359 r373  
    66using System.IO; 
    77using System.Xml; 
     8using Misuzilla.Net.Irc; 
    89 
    910namespace Misuzilla.Applications.TwitterIrcGateway 
     
    5455                retGroups[group.Name] = group; 
    5556                group.IsJoined = false; 
     57                group.ChannelModes = group.ChannelModes == null ? new List<ChannelMode>() : group.ChannelModes; 
    5658            } 
    5759 
     
    6769        public Boolean IsJoined { get; set; } 
    6870        public String Topic { get; set; } 
     71        public List<ChannelMode> ChannelModes { get; set; } 
    6972 
    7073        public Group() 
    7174        { 
     75            ChannelModes = new List<ChannelMode>(); 
    7276        } 
    7377 
     
    8084            Name = name; 
    8185            Members = new List<string>(); 
     86            ChannelModes = new List<ChannelMode>(); 
    8287        } 
    8388 
     
    110115        } 
    111116 
     117        public Boolean IgnoreEchoBack 
     118        { 
     119            get 
     120            { 
     121                return ChannelModes.Exists(mode => mode.Mode == ChannelModeTypes.Private); 
     122            } 
     123        } 
     124 
    112125        #region IComparable �����o 
    113126 
  • TwitterIrcGateway/TwitterIrcGatewayCore/Session.cs

    r369 r373  
    6666            MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_LIST); 
    6767            MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_TIGGC); 
    68             MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_TOPIC); 
     68            MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_MODE); 
    6969 
    7070            _groups = new Groups(); 
     
    413413                    SendNumericReply(NumericReply.RPL_ENDOFNAMES, channelName, "End of NAMES list"); 
    414414                    group.IsJoined = true; 
     415 
     416                    // mode 
     417                    foreach (ChannelMode mode in group.ChannelModes) 
     418                    { 
     419                        Send(new ModeMessage(channelName, mode.ToString())); 
     420                    } 
    415421                     
    416422                    // Set topic of client, if topic was set 
     
    736742                        foreach (Group group in _groups.Values) 
    737743                        { 
    738                             if (group.IsJoined && String.Compare(message.Receiver, group.Name, true) != 0) 
     744                            if (group.IsJoined && !group.IgnoreEchoBack && String.Compare(message.Receiver, group.Name, true) != 0) 
    739745                            { 
    740746                                if (_server.BroadcastUpdateMessageIsNotice) 
     
    866872            } 
    867873        } 
    868  
     874         
     875        void MessageRecieved_MODE(object sender, MessageRecievedEventArgs e) 
     876        { 
     877            if (String.Compare(e.Message.Command, "MODE", true) != 0) return; 
     878            ModeMessage modeMsg = e.Message as ModeMessage; 
     879            // チャンネルターゲットのみ 
     880            if (modeMsg.CommandParams[0].StartsWith("#")) 
     881            { 
     882                String channel = modeMsg.CommandParams[0]; 
     883                String modeArgs = modeMsg.CommandParams[1]; 
     884                Group group; 
     885                if (!_groups.TryGetValue(channel, out group)) 
     886                { 
     887                    SendErrorReply(ErrorReply.ERR_NOSUCHCHANNEL); 
     888                } 
     889                 
     890                foreach (ChannelMode mode in ChannelMode.Parse(modeArgs)) 
     891                { 
     892                    foreach (ChannelMode mode2 in new List<ChannelMode>(group.ChannelModes)) 
     893                    { 
     894                        if (mode2.Mode == mode.Mode && mode2.Parameter == mode.Parameter) 
     895                        { 
     896                            if (mode.IsRemove) 
     897                            { 
     898                                // すでにあって削除 
     899                                group.ChannelModes.Remove(mode2); 
     900                            } 
     901                            else 
     902                            { 
     903                                // すでにある 
     904                                goto NEXT; 
     905                            } 
     906                        } 
     907                    } 
     908                     
     909                    if (!mode.IsRemove) 
     910                    { 
     911                        group.ChannelModes.Add(mode); 
     912                    } 
     913                    SendServer(new ModeMessage(channel, mode.ToString())); 
     914                    SaveGroups(); 
     915                NEXT: 
     916                    ; 
     917                } 
     918            } 
     919        } 
    869920        #endregion 
    870921 
  • TwitterIrcGateway/TwitterIrcGatewayCore/TwitterIrcGatewayCore.csproj

    r358 r373  
    33    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
    44    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 
    5     <ProductVersion>8.0.50727</ProductVersion> 
     5    <ProductVersion>9.0.21022</ProductVersion> 
    66    <SchemaVersion>2.0</SchemaVersion> 
    77    <ProjectGuid>{8A256703-BDC7-4E96-8AC3-89A56A2AFB86}</ProjectGuid> 
     
    4343    <Compile Include="Filter.cs" /> 
    4444    <Compile Include="Group.cs" /> 
     45    <Compile Include="IRCClient\ChannelMode.cs" /> 
     46    <Compile Include="IRCClient\ChannelModeTypes.cs" /> 
    4547    <Compile Include="IRCClient\Converter.cs" /> 
    4648    <Compile Include="IRCClient\ErrorReply.cs" />