/// <summary> /// Initialise the forums element from the server. /// </summary> private void Initialise() { string url = string.Format("cix.svc/user/{0}/topics.xml", _data.Name); WebRequest wrGeturl = WebRequest.Create(CIXOAuth.GetUri(url)); wrGeturl.Method = "GET"; try { Stream objStream = wrGeturl.GetResponse().GetResponseStream(); if (objStream != null) { using (XmlReader reader = XmlReader.Create(objStream)) { XmlSerializer serializer = new XmlSerializer(typeof(UserTopicResultSet)); UserTopicResultSet listOfTopics = (UserTopicResultSet)serializer.Deserialize(reader); _topics = new Topics(); foreach (UserTopicResultSetUserTopicsUserTopic topic in listOfTopics.UserTopics) { Topic newTopic = new Topic(topic, this); _topics.Add(newTopic); } } } } catch (WebException e) { if (e.Message.Contains("401")) { throw new AuthenticationException("Authentication Failed", e); } } _initialised = true; }
/// <summary> /// Switch to the new command state. /// </summary> /// <param name="newState">The state to switch to</param> private void ChangeState(CoSyState newState) { if (newState == CoSyState.MAIN) { _currentTopic = null; } _stateStack.Push(newState); }
/// <summary> /// Handle the JOIN command. /// </summary> /// <param name="buffer">Line buffer</param> /// <param name="parser">Parser</param> private void JoinCommand(LineBuffer buffer, Parser parser) { string forumName = parser.NextArgument(); if (!string.IsNullOrEmpty(forumName)) { string topicName = null; string[] joinParams = forumName.Split(new[] {'/'}); if (joinParams.Length == 2) { forumName = joinParams[0]; topicName = joinParams[1]; } if (!_forums.IsJoined(forumName)) { buffer.WriteString(string.Format("You are not registered in '{0}'. ", forumName)); if (Ask(buffer, "Would you like to register (y/n)? ")) { if (!_forums.Join(forumName)) { buffer.WriteRedirectableLine(string.Format("No conference '{0}'.", forumName)); return; } } } Forum thisForum = _forums[forumName]; Topic thisTopic; do { if (topicName != null && !thisForum.Topics.Contains(topicName)) { buffer.WriteLine("Couldn't find topic: No such file or directory"); buffer.WriteLine(string.Format("Topic '{0}' not found.", topicName)); topicName = thisForum.Topics[0].Name; } if (topicName == null) { buffer.WriteString("Topics are:"); for (int c = 0; c < thisForum.Topics.Count; ++c) { string topicString = thisForum.Topics[c].Name; if (c > 0) { buffer.WriteString(","); } buffer.WriteString(string.Format(" '{0}'", topicString)); } buffer.WriteLine(""); buffer.WriteString("Topic? "); topicName = buffer.ReadLine(); if (topicName == "quit") { return; } } thisTopic = thisForum.Topics[topicName]; } while (thisTopic == null); buffer.WriteRedirectableLine(string.Format("Joining conference '{0}', topic '{1}'. {2} new message(s).", forumName, topicName, thisTopic.Unread)); _currentTopic = thisTopic; ChangeState(CoSyState.READ); } }
public void Add(Topic newTopic) { _topics.Add(newTopic); }