Created
November 14, 2009 23:19
-
-
Save mattpodwysocki/234839 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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