Skip to content

Instantly share code, notes, and snippets.

@mattpodwysocki
Created November 14, 2009 23:19
Show Gist options
  • Save mattpodwysocki/234839 to your computer and use it in GitHub Desktop.
Save mattpodwysocki/234839 to your computer and use it in GitHub Desktop.
public static IObservable<Stream> GetRequestStreamAsync(this WebRequest request)
{
return Observable.FromAsyncPattern<Stream>(request.BeginGetRequestStream, request.EndGetRequestStream)();
}
public static IObservable<WebResponse> GetResponseAsync(this WebRequest request)
{
return Observable.FromAsyncPattern <WebResponse>(request.BeginGetResponse, request.EndGetResponse)();
}
public static IObservable<Stream> GetResponseStreamAsync(this WebRequest request)
{
return Observable.FromAsyncPattern <Stream>(request.BeginGetRequestStream, request.EndGetRequestStream)();
}
public static IObservable<Unit> WriteAsync(this Stream stream, byte[] buffer, int offset, int count)
{
return Observable.FromAsyncPattern<byte[], int, int>(
stream.BeginWrite,
stream.EndWrite)(buffer, offset, count);
}
private static IObservable<WebRequest> CreateWebRequest(string url, string userName, string password, string method)
{
return Observable.Create<WebRequest>(observer =>
{
try
{
var request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = new NetworkCredential(userName, password);
request.Method = method;
observer.OnNext(request);
observer.OnCompleted();
}
catch (Exception exception)
{
observer.OnError(exception);
}
return () => { };
});
}
var tweetObservalue =
from request in CreateWebRequest("http://twitter.com/statuses/update.xml", userName, password, "POST")
from requestStream in request.GetRequestStreamAsync()
let tweet = HttpUtility.HtmlEncode("status=" + text)
let buffer = Encoding.UTF8.GetBytes(tweet)
from _ in requestStream.WriteAsync(buffer, 0, buffer.Length)
from response in request.GetResponseAsync()
let responseStream = response.GetResponseStream()
let reader = new StreamReader(responseStream)
select reader.ReadToEnd();
tweetObservalue.Subscribe(tweet => MessageBox.Show(tweet));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment