Changeset 367

Show
Ignore:
Timestamp:
03/16/08 19:02:56 (10 months ago)
Author:
tomoyo
Message:

* 初回接続時のログをグループにも転送するようにした
* メッセージ送信ウェイトを指定できるようにした

Location:
TwitterIrcGateway
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • TwitterIrcGateway/TwitterIrcGateway/App.config

    r364 r367  
    5656                <value>False</value> 
    5757            </setting> 
     58            <setting name="ClientMessageWait" serializeAs="String"> 
     59                <value>0</value> 
     60            </setting> 
    5861        </Misuzilla.Applications.TwitterIrcGateway.Settings> 
    5962    </userSettings> 
  • TwitterIrcGateway/TwitterIrcGateway/Program.cs

    r364 r367  
    6060            _server.DisableUserList = _settings.DisableUserList; 
    6161            _server.BroadcastUpdate = _settings.BroadcastUpdate; 
     62            _server.ClientMessageWait = _settings.ClientMessageWait; 
    6263            _server.SessionStartedRecieved += new EventHandler<SessionStartedEventArgs>(_server_SessionStartedRecieved); 
    6364            try 
  • TwitterIrcGateway/TwitterIrcGateway/Settings.Designer.cs

    r364 r367  
    22// <auto-generated> 
    33//     このコードはツールによって生成されました。 
    4 //     ランタイム バージョン:2.0.50727.1433 
     4//     ランタイム バージョン:2.0.50727.1434 
    55// 
    66//     このファイルへの変更は、以下の状況下で不正な動作の原因になったり、 
     
    215215            } 
    216216        } 
     217         
     218        [global::System.Configuration.UserScopedSettingAttribute()] 
     219        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
     220        [global::System.Configuration.DefaultSettingValueAttribute("0")] 
     221        public int ClientMessageWait { 
     222            get { 
     223                return ((int)(this["ClientMessageWait"])); 
     224            } 
     225            set { 
     226                this["ClientMessageWait"] = value; 
     227            } 
     228        } 
    217229    } 
    218230} 
  • TwitterIrcGateway/TwitterIrcGateway/Settings.settings

    r364 r367  
    5151      <Value Profile="(Default)">False</Value> 
    5252    </Setting> 
     53    <Setting Name="ClientMessageWait" Type="System.Int32" Scope="User"> 
     54      <Value Profile="(Default)">0</Value> 
     55    </Setting> 
    5356  </Settings> 
    5457</SettingsFile> 
  • TwitterIrcGateway/TwitterIrcGatewayCLI/Program.cs

    r364 r367  
    5757            _server.DisableUserList = options.DisableUserlist; 
    5858            _server.BroadcastUpdate = options.BroadcastUpdate; 
     59            _server.ClientMessageWait = options.ClientMessageWait; 
    5960            _server.SessionStartedRecieved += new EventHandler<SessionStartedEventArgs>(_server_SessionStartedRecieved); 
    6061 
     
    7576            Console.WriteLine("[Configuration] DisableUserList: {0}", _server.DisableUserList); 
    7677            Console.WriteLine("[Configuration] BroadcastUpdate: {0}", _server.BroadcastUpdate); 
     78            Console.WriteLine("[Configuration] ClientMessageWait: {0}", _server.ClientMessageWait); 
    7779 
    7880            _server.Start(bindAddress, options.Port); 
     
    160162        [Description("broadcast status message on updated")] 
    161163        public Boolean BroadcastUpdate { get; set; } 
     164 
     165        [DefaultValue(0)] 
     166        [Description("wait of send messages to client (milliseconds)")] 
     167        public Int32 ClientMessageWait { get; set; } 
    162168    } 
    163169} 
  • TwitterIrcGateway/TwitterIrcGatewayCore/Server.cs

    r364 r367  
    7878        /// </summary> 
    7979        public Boolean BroadcastUpdate = false; 
     80 
     81        /// <summary> 
     82        /// �N���C�A���g�Ƀ��b�Z�[�W�𑗐M�������̃E�F�C�g 
     83        /// </summary> 
     84        public Int32 ClientMessageWait = 0; 
    8085 
    8186        public const String ServerName = "localhost"; 
  • TwitterIrcGateway/TwitterIrcGatewayCore/Session.cs

    r364 r367  
    11351135                if (_isFirstTime) 
    11361136                { 
    1137                     NoticeMessage noticeMsg = new NoticeMessage(); 
    1138                     noticeMsg.SenderNick = status.User.ScreenName; 
    1139                     noticeMsg.SenderHost = "twitter@" + Server.ServerName; 
    1140                     noticeMsg.Receiver = _server.ChannelName; 
    1141                     noticeMsg.Content = String.Format("{0}: {1}", status.CreatedAt.ToString("HH:mm"), line); 
    1142                     Send(noticeMsg); 
     1137                    Send(new NoticeMessage() 
     1138                    { 
     1139                        SenderNick = status.User.ScreenName, 
     1140                        SenderHost = "twitter@" + Server.ServerName, 
     1141                        Receiver   = _server.ChannelName, 
     1142                        Content    = String.Format("{0}: {1}", status.CreatedAt.ToString("HH:mm"), line) 
     1143                    }); 
    11431144                } 
    11441145                else 
    11451146                { 
    1146                     IRCMessage msg; 
    1147                     switch (filterArgs.IRCMessageType.ToUpperInvariant()) 
    1148                     { 
    1149                         case "NOTICE": 
    1150                             msg = new NoticeMessage(_server.ChannelName, line); 
    1151                             break; 
    1152                         case "PRIVMSG": 
    1153                         default: 
    1154                             msg = new PrivMsgMessage(_server.ChannelName, line); 
    1155                             break; 
    1156                     } 
    1157                     msg.SenderNick = status.User.ScreenName; 
    1158                     msg.SenderHost = "twitter@" + Server.ServerName; 
    1159                     Send(msg); 
    1160  
    1161                     // グループにも投げる 
    1162                     foreach (Group group in _groups.Values) 
    1163                     { 
    1164                         if (!group.IsJoined) 
    1165                             continue; 
    1166  
    1167                         Boolean isMatched = String.IsNullOrEmpty(group.Topic) ? true : Regex.IsMatch(line, group.Topic); 
    1168                          
    1169                         // 1: member exists in channel && match regex 
    1170                         // 2: no members in channel(self only) && match regex 
    1171                         if ((group.Exists(status.User.ScreenName) || group.Members.Count == 0) && isMatched) 
     1147                    Send(CreateIRCMessageFromStatusAndType(status, filterArgs.IRCMessageType, _server.ChannelName, line)); 
     1148                } 
     1149 
     1150                // グループにも投げる 
     1151                foreach (Group group in _groups.Values) 
     1152                { 
     1153                    if (!group.IsJoined) 
     1154                        continue; 
     1155 
     1156                    Boolean isMatched = String.IsNullOrEmpty(group.Topic) ? true : Regex.IsMatch(line, group.Topic); 
     1157                     
     1158                    // 1: member exists in channel && match regex 
     1159                    // 2: no members in channel(self only) && match regex 
     1160                    if ((group.Exists(status.User.ScreenName) || group.Members.Count == 0) && isMatched) 
     1161                    { 
     1162                        if (_isFirstTime) 
    11721163                        { 
    1173                             switch (filterArgs.IRCMessageType.ToUpperInvariant()) 
    1174                             { 
    1175                                 case "NOTICE": 
    1176                                     msg = new NoticeMessage(group.Name, line); 
    1177                                     break; 
    1178                                 case "PRIVMSG": 
    1179                                 default: 
    1180                                     msg = new PrivMsgMessage(group.Name, line); 
    1181                                     break; 
    1182                             }  
    1183                             msg.SenderNick = status.User.ScreenName; 
    1184                             msg.SenderHost = "twitter@" + Server.ServerName; 
    1185                             Send(msg); 
     1164                            // 初回はNOTICE 
     1165                            Send(CreateIRCMessageFromStatusAndType(status, "NOTICE", group.Name, String.Format("{0}: {1}", status.CreatedAt.ToString("HH:mm"), line))); 
     1166                        } 
     1167                        else 
     1168                        { 
     1169                            Send(CreateIRCMessageFromStatusAndType(status, filterArgs.IRCMessageType, group.Name, line)); 
    11861170                        } 
    11871171                    } 
     
    12051189                } 
    12061190            } 
     1191 
     1192            // ウェイト 
     1193            if (_server.ClientMessageWait > 0) 
     1194                Thread.Sleep(_server.ClientMessageWait); 
     1195        } 
     1196 
     1197        // XXX: IRCクライアントライブラリのアップデートで対応できるけどとりあえず... 
     1198        private IRCMessage CreateIRCMessageFromStatusAndType(Status status, String type, String receiver, String line) 
     1199        { 
     1200            IRCMessage msg; 
     1201            switch (type.ToUpperInvariant()) 
     1202            { 
     1203                case "NOTICE": 
     1204                    msg = new NoticeMessage(receiver, line); 
     1205                    break; 
     1206                case "PRIVMSG": 
     1207                default: 
     1208                    msg = new PrivMsgMessage(receiver, line); 
     1209                    break; 
     1210            }  
     1211            msg.SenderNick = status.User.ScreenName; 
     1212            msg.SenderHost = "twitter@" + Server.ServerName; 
     1213 
     1214            return msg; 
    12071215        } 
    12081216