/// <summary> /// Handles the socket's DidRead event. /// </summary> /// <param name="socket">The <see cref="AsyncSocket"/></param> /// <param name="readBytes">Array of <see cref="byte"/>s that were read</param> /// <param name="tag">The tag identifying the read operation</param> protected virtual void SocketDidRead(AsyncSocket socket, byte[] readBytes, long tag) { try { Data data = new Data(readBytes); this.AlreadyReceivedData.Append(data.ToString()); GNTPParser parser = (GNTPParser)socket.Tag; NextIndicator next = parser.Parse(readBytes); if (next.ShouldContinue) { if (next.UseBytes) { socket.Read(next.Bytes, TIMEOUT_GNTP_HEADER, parser.Tag); } else { socket.Read(next.Length, TIMEOUT_GNTP_BINARY, parser.Tag); } } } catch (GrowlException gEx) { OnError(gEx.ErrorCode, gEx.Message, gEx.AdditionalInfo); } catch (Exception ex) { OnError(ErrorCode.INVALID_REQUEST, ErrorDescription.MALFORMED_REQUEST, ex.Message); } }
/// <summary> /// Initializes a new instance of the <see cref="GNTPSocketReader"/> class. /// </summary> /// <param name="socket">The <see cref="AsyncSocket"/></param> /// <param name="passwordManager">The <see cref="PasswordManager"/> containing a list of allowed passwords</param> /// <param name="passwordRequired">Indicates if a password is required</param> /// <param name="allowNetworkNotifications">Indicates if network requests are allowed</param> /// <param name="allowBrowserConnections">Indicates if browser requests are allowed</param> /// <param name="allowSubscriptions">Indicates if SUBSCRIPTION requests are allowed</param> /// <param name="requestInfo">The <see cref="RequestInfo"/> associated with this request</param> public GNTPSocketReader(AsyncSocket socket, PasswordManager passwordManager, bool passwordRequired, bool allowNetworkNotifications, bool allowBrowserConnections, bool allowSubscriptions, RequestInfo requestInfo) { this.parser = new GNTPParser(passwordManager, passwordRequired, allowNetworkNotifications, allowBrowserConnections, allowSubscriptions, requestInfo); parser.Error += new GNTPParser.GNTPParserErrorEventHandler(parser_Error); parser.MessageParsed += new GNTPParser.GNTPParserMessageParsedEventHandler(parser_MessageParsed); this.socket = socket; this.socket.Tag = parser; }