public void ParseComplex() { var modeMap = new ChannelModeMap(); List<ChannelModeChangeInfo> changeInfos; ChannelModeChangeInfo changeInfo; changeInfos = ChannelModeChangeInfo.Parse(modeMap, "#test", "-l+o-k+v", "op_nick * voice_nick"); Assert.IsNotNull(changeInfos); Assert.AreEqual(4, changeInfos.Count); changeInfo = changeInfos[0]; Assert.AreEqual(ChannelModeChangeAction.Unset, changeInfo.Action); Assert.AreEqual(ChannelMode.UserLimit, changeInfo.Mode); Assert.AreEqual('l', changeInfo.ModeChar); Assert.AreEqual(null, changeInfo.Parameter); changeInfo = changeInfos[1]; Assert.AreEqual(ChannelModeChangeAction.Set, changeInfo.Action); Assert.AreEqual(ChannelMode.Op, changeInfo.Mode); Assert.AreEqual('o', changeInfo.ModeChar); Assert.AreEqual("op_nick", changeInfo.Parameter); changeInfo = changeInfos[2]; Assert.AreEqual(ChannelModeChangeAction.Unset, changeInfo.Action); Assert.AreEqual(ChannelMode.Key, changeInfo.Mode); Assert.AreEqual('k', changeInfo.ModeChar); Assert.AreEqual("*", changeInfo.Parameter); changeInfo = changeInfos[3]; Assert.AreEqual(ChannelModeChangeAction.Set, changeInfo.Action); Assert.AreEqual(ChannelMode.Voice, changeInfo.Mode); Assert.AreEqual('v', changeInfo.ModeChar); Assert.AreEqual("voice_nick", changeInfo.Parameter); }
public void ParseUnknown() { var modeMap = new ChannelModeMap(); List<ChannelModeChangeInfo> changeInfos; ChannelModeChangeInfo changeInfo; changeInfos = ChannelModeChangeInfo.Parse(modeMap, "#test", "+X-Y", "foo bar"); Assert.IsNotNull(changeInfos); Assert.AreEqual(2, changeInfos.Count); changeInfo = changeInfos[0]; Assert.AreEqual(ChannelModeChangeAction.Set, changeInfo.Action); Assert.AreEqual(ChannelMode.Unknown, changeInfo.Mode); Assert.AreEqual('X', changeInfo.ModeChar); Assert.AreEqual("foo", changeInfo.Parameter); changeInfo = changeInfos[1]; Assert.AreEqual(ChannelModeChangeAction.Unset, changeInfo.Action); Assert.AreEqual(ChannelMode.Unknown, changeInfo.Mode); Assert.AreEqual('Y', changeInfo.ModeChar); Assert.AreEqual("bar", changeInfo.Parameter); }
/// <summary> /// Connection parameters required to establish an server connection. /// </summary> /// <param name="addresslist">The list of server hostnames.</param> /// <param name="port">The TCP port the server listens on.</param> public new void Connect(string[] addresslist, int port) { _SupportNonRfcLocked = true; ChannelModeMap = new ChannelModeMap(); base.Connect(addresslist, port); }
private void _Event_RPL_BOUNCE(IrcMessageData ircdata) { // HACK: might be BOUNCE or ISUPPORT; try to detect if (ircdata.Message != null && ircdata.Message.StartsWith("Try server ")) { // BOUNCE string host = null; int port = -1; // try to parse out host and port var match = _BounceMessageRegex.Match(ircdata.Message); if (match.Success) { host = match.Groups [1].Value; port = int.Parse(match.Groups [2].Value); } if (OnBounce != null) { OnBounce(this, new BounceEventArgs(ircdata, host, port)); } return; } // ISUPPORT _ServerProperties.ParseFromRawMessage(ircdata.RawMessageArray); if (ircdata.RawMessageArray.Any(x => x.StartsWith("CHANMODES="))) { var chanModes = _ServerProperties.RawProperties["CHANMODES"]; if (!String.IsNullOrEmpty(chanModes)) { ChannelModeMap = new ChannelModeMap(chanModes); } } if (_ServerProperties.RawProperties.ContainsKey("NAMESX")) { WriteLine("PROTOCTL NAMESX", Priority.Critical); } }
/// <summary> /// This class manages the connection server and provides access to all the objects needed to send and receive messages. /// </summary> public IrcClient() { #if LOG4NET Logger.Main.Debug("IrcClient created"); #endif OnReadLine += new ReadLineEventHandler(_Worker); OnDisconnected += new EventHandler(_OnDisconnected); OnConnectionError += new EventHandler(_OnConnectionError); ChannelModeMap = new ChannelModeMap(); }
private void _Event_RPL_BOUNCE(IrcMessageData ircdata) { // HACK: might be BOUNCE or ISUPPORT; try to detect if (ircdata.Message.StartsWith("Try server ")) { // BOUNCE string host = null; int port = -1; // try to parse out host and port var match = _BounceMessageRegex.Match(ircdata.Message); if (match.Success) { host = match.Groups [1].Value; port = int.Parse(match.Groups [2].Value); } if (OnBounce != null) { OnBounce(this, new BounceEventArgs(ircdata, host, port)); } return; } // ISUPPORT // split the message (0 = server, 1 = code, 2 = my nick) for (int i = 3; i < ircdata.RawMessageArray.Length; ++i) { var msg = ircdata.RawMessageArray [i]; if (msg.StartsWith(":")) { // addendum; we're done break; } var keyval = msg.Split('='); if (keyval.Length == 1) { // keyword only _ServerProperties.RawProperties [keyval [0]] = null; } else if (keyval.Length == 2) { // key and value _ServerProperties.RawProperties [keyval [0]] = keyval [1]; } else { #if LOG4NET Logger.Connection.Warn("confusing ISUPPORT message, ignoring: " + msg); #endif } if (keyval.Length == 2 && keyval[0] == "CHANMODES") { var chanModes = keyval[1]; if (!String.IsNullOrEmpty(chanModes)) { ChannelModeMap = new ChannelModeMap(chanModes); } } } }
public void ParseWithoutParameter() { var modeMap = new ChannelModeMap(); List<ChannelModeChangeInfo> changeInfos; ChannelModeChangeInfo changeInfo; changeInfos = ChannelModeChangeInfo.Parse(modeMap, "#test", "+nt", ""); Assert.IsNotNull(changeInfos); Assert.AreEqual(2, changeInfos.Count); changeInfo = changeInfos[0]; Assert.AreEqual(ChannelModeChangeAction.Set, changeInfo.Action); Assert.AreEqual(ChannelMode.Unknown, changeInfo.Mode); Assert.AreEqual('n', changeInfo.ModeChar); Assert.AreEqual(null, changeInfo.Parameter); changeInfo = changeInfos[1]; Assert.AreEqual(ChannelModeChangeAction.Set, changeInfo.Action); Assert.AreEqual(ChannelMode.TopicLock, changeInfo.Mode); Assert.AreEqual('t', changeInfo.ModeChar); Assert.AreEqual(null, changeInfo.Parameter); }
public void ParseWithParameter() { var modeMap = new ChannelModeMap(); List<ChannelModeChangeInfo> changeInfos; ChannelModeChangeInfo changeInfo; changeInfos = ChannelModeChangeInfo.Parse(modeMap, "#test", "+o", "meebey"); Assert.IsNotNull(changeInfos); Assert.AreEqual(1, changeInfos.Count); changeInfo = changeInfos[0]; Assert.AreEqual(ChannelModeChangeAction.Set, changeInfo.Action); Assert.AreEqual(ChannelMode.Op, changeInfo.Mode); Assert.AreEqual('o', changeInfo.ModeChar); Assert.AreEqual("meebey", changeInfo.Parameter); }
/// <overloads>this method has 3 overloads</overloads> /// <summary> /// Connects to the specified server and port using the specified transport, when the connection fails /// the next server in the list will be used. /// </summary> /// <param name="transport">Transport protocol to use</param> /// <param name="addresslist">List of servers to connect to</param> /// <param name="port">Portnumber to connect to</param> /// <exception cref="CouldNotConnectException">The connection failed</exception> /// <exception cref="AlreadyConnectedException">If there is already an active connection</exception> public new void Connect(IIrcTransportManager transport, string[] addresslist, int port = 0) { _SupportNonRfcLocked = true; ChannelModeMap = new ChannelModeMap(); base.Connect(transport, addresslist, port); // We get here only if the connection is successful if (_UseIrcV3) { _CapNegotiateStart(); } }