private void HandleError(String flap) { string e = string.Empty; string v = string.Empty; StringTokenizer stk = new StringTokenizer(flap,':'); if(stk.HasMoreTokens) { e = stk.ReadToken(); } if(stk.HasMoreTokens) { v = stk.ReadToken(); } string message = null; switch(e) { case "901": message = string.Format("{0} is not currently available.", v); break; case "902": message = string.Format("Warning of {0} is not currently available.", v); break; case "903": message = string.Format("A message has been dropped, you are exceeding the server speed limit", v); break; case "980": throw new TocException("Incorrect nickname or password."); case "981": throw new TocException("The service is temporarily unavailable."); case "982": throw new TocException("Your warning level is currently too high to sign on."); case "983": throw new TocException("You have been connecting and disconnecting too frequently. Wait 10 minutes and try again. If you continue to try, you will need to wait even longer."); case "989": throw new TocException("An unknown signon error has occurred " + v); } if(message != null) { if(Error != null) { Error( this, new ErrorEventArgs(int.Parse(e), message, v)); } } else { throw new TocException(flap); } }
private void HandleIM(String flap) { if(Message != null) { StringTokenizer stk = new StringTokenizer(flap,':'); string from = stk.ReadToken(); bool autoResponse = stk.ReadToken() == "T"; if(protocol == ProtocolVersion.TOCv2){ string unknownParam = stk.ReadToken(); } string message = stk.ReadToEnd(); MessageEventArgs e = new MessageEventArgs(from, message, autoResponse); Message(this,e); } }
private void HandleUpdate(String flap) { StringTokenizer stk = new StringTokenizer(flap,':'); string screenName = stk.ReadToken(); BuddyInfo buddy = Buddies[screenName]; if(buddy != null) { buddy.screenName = screenName; buddy.online = stk.ReadToken() == "T"; buddy.evilAmount = int.Parse(stk.ReadToken()); long epochDate = long.Parse(stk.ReadToken()); buddy.signOnTime = new DateTime(1970,1,1).AddSeconds(epochDate); int idleMinutes = int.Parse(stk.ReadToken()); buddy.idleTime = new TimeSpan(0,idleMinutes,0); buddy.isOnAol = stk.ReadChar() == 'A'; switch(stk.ReadChar()) { case 'A': buddy.userClass = BuddyUserClass.Admin; break; case 'U': buddy.userClass = BuddyUserClass.Unconfirmed; break; default: buddy.userClass = BuddyUserClass.Normal; break; } if(stk.HasMoreTokens) { buddy.isAvailable = stk.ReadChar() != 'U'; } else { buddy.isAvailable = true; } if(BuddyUpdate != null) { BuddyUpdate(this, new BuddyUpdateEventArgs(buddy)); } } }
private void ProcessTocEvents() { isShuttingDown = false; while (!isShuttingDown) { string flap = ReadFlap(); if ( flap == null ) { continue; } StringTokenizer stk = new StringTokenizer(flap,':'); switch(stk.ReadToken().ToUpper()) { case "IM_IN": HandleIM(stk.ReadToEnd()); break; case "IM_IN2": HandleIM(stk.ReadToEnd()); break; case "ERROR": HandleError(stk.ReadToEnd()); break; case "CONFIG": HandleConfig(stk.ReadToEnd()); break; case "CONFIG2": HandleConfig(stk.ReadToEnd()); break; case "UPDATE_BUDDY": HandleUpdate(stk.ReadToEnd()); break; case "UPDATE_BUDDY2": HandleUpdate(stk.ReadToEnd()); break; } } }