Example #1
0
        private void bStart_Click(object sender, EventArgs e)
        {
            if (_isRun)
            {
                DialogResult cancelResult = MessageBox.Show("Are you sure you want to cancel data fetching?", "Cancel fetching?",
                                                            MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                if (cancelResult == DialogResult.Yes)
                {
                    _isRun = false;
                    if (_processor != null)
                    {
                        _processor.EndStreaming();
                    }
                    EnableControls(true);
                    bStart.Text      = "Start";
                    pbProgress.Value = 0;

                    if (_results.Count > 0)
                    {
                        DialogResult saveResult = MessageBox.Show("Do you want to save fetched data to the CSV file?", "Save data?",
                                                                  MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                        if (saveResult == DialogResult.Yes)
                        {
                            GenerateCsv(_results);
                        }
                    }
                }

                return;
            }

            if (!IsValidParameters())
            {
                return;
            }

            _isRun = true;
            PopulateSettings();
            EnableControls(false);
            bStart.Text = "Cancel";
            WriteLineToTrace("Connecting to stream...");

            _results.Clear();

            pbProgress.Minimum = 0;
            pbProgress.Maximum = _settings.total;
            pbProgress.Step    = 1;

            SandBoxConnection connection = new SandBoxConnection(_settings.username, _settings.password, _settings.account, _settings.source);

            connection.ReplyFrom = DateTime.ParseExact(_settings.from, "yyyyMMddHHmm", CultureInfo.InvariantCulture);
            connection.ReplyTo   = DateTime.ParseExact(_settings.to, "yyyyMMddHHmm", CultureInfo.InvariantCulture);
            connection.IsLive    = _settings.live;

            GnipStreamProcessorAsync processor = GnipStreamProcessorBase.CreateGnipProcessor <GnipStreamProcessorAsync>(connection);

            processor.DataReceived  += processor_DataReceived;
            processor.ErrorHappened += processor_ErrorHappened;
            processor.BeginStreaming();
        }
Example #2
0
        public override void BeginStreaming()
        {
            HttpWebRequest request = GetStreamRequest();

            Stream       stream = null;
            StreamReader reader = null;

            try
            {
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                stream = (Connection.UseEncoding) ? new GZipStream(response.GetResponseStream(), CompressionMode.Decompress) : response.GetResponseStream();

                byte[]      buffer = new byte[8192];
                List <byte> output = new List <byte>();

                while (stream.CanRead)
                {
                    Thread.Sleep(1000);

                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        throw new StreamingException(response.StatusCode, response.StatusDescription);
                    }

                    int readCount = stream.Read(buffer, 0, buffer.Length);
                    output.AddRange(buffer.Take(readCount));
                    string outputString = Encoding.UTF8.GetString(output.ToArray());

                    if (!Formatter.HasDelimiter(outputString))
                    {
                        continue;
                    }

                    int delimiterIndex = Formatter.FindLastDelimiter(outputString);
                    outputString = outputString.Substring(0, delimiterIndex);
                    output.RemoveRange(0, Encoding.UTF8.GetByteCount(outputString));

                    if (String.IsNullOrEmpty(outputString))
                    {
                        continue;
                    }

                    outputString = Formatter.Normalize(outputString);

                    OnHeartbeatReceived(new HeartbeatEventArgs()
                    {
                        Message = outputString
                    });

                    string[] lines = outputString.Split(new[] { Environment.NewLine }, new StringSplitOptions());
                    for (int i = 0; i < lines.Length; i++)
                    {
                        string heartBeatCheck = lines[i];
                        if (heartBeatCheck.Trim().Length > 0)
                        {
                            if (!Formatter.IsValid(heartBeatCheck))
                            {
                                continue;
                            }

                            Type contentType = GnipStreamProcessorBase.GetObjectTypeByService(Connection.DataSource);
                            try
                            {
                                DynamicActivityBase activity = null;

                                if (Connection.DataFormat == GnipDataFormat.XML)
                                {
                                    MemoryStream              memStr    = new MemoryStream(Encoding.UTF8.GetBytes(heartBeatCheck));
                                    XmlTextReader             xmlReader = new XmlTextReader(memStr);
                                    DynamicXMLObjectConverter converter = new DynamicXMLObjectConverter();
                                    dynamic obj = converter.Deserialize(xmlReader, typeof(DynamicXMLObject));
                                    activity = ReflectionHelper.CreateAndCastInstance(contentType, obj);
                                }
                                else
                                {
                                    JavaScriptSerializer serializer = new JavaScriptSerializer();
                                    serializer.RegisterConverters(new[] { new DynamicJsonObjectConverter() });
                                    dynamic obj = serializer.Deserialize(heartBeatCheck, typeof(DynamicJsonObject));
                                    activity = ReflectionHelper.CreateAndCastInstance(contentType, obj);
                                }

                                OnDataReceived(activity);
                            }
                            catch (Exception ex)
                            {
                                OnErrorHappened(ex);
                            }
                        }
                    }
                }
            }
            catch (WebException ex)
            {
                string status  = "";
                string message = "";

                if (ex.Status == WebExceptionStatus.ProtocolError)
                {
                    HttpWebResponse response = (HttpWebResponse)ex.Response;
                    using (response)
                    {
                        status  = ((int)response.StatusCode).ToString();
                        message = response.StatusDescription;

                        stream = response.GetResponseStream();
                        if (stream != null && stream.CanRead)
                        {
                            reader  = new StreamReader(stream);
                            message = reader.ReadToEnd();
                            OnErrorHappened(ex);
                        }
                    }
                }
                else
                {
                    OnErrorHappened(ex);
                }
            }
            catch (Exception ex)
            {
                OnErrorHappened(ex);
            }
            finally
            {
                if (stream != null)
                {
                    stream.Close();
                }

                if (reader != null)
                {
                    reader.Close();
                    reader = null;
                }
            }
        }