Anybody familiar with c# web sockets?
-
I need to make a c# websocket client to connect to hitbox.tv, but literally every sample I've seen so far is either on how to create a web socket server, or how to connect with a c# client - but the sample doesn't work.
I've tried alchemy, superwebsockets, owin, and sockets.io, and I just don't fucking get how to do it.
The concept is extremely basic:
- Query a remote site for IPs
- Use retrieved IPs to issue a second request to ws://ip
- Send/receive as normal
http://help.hitbox.tv/customer/portal/articles/1470464-changes-to-websocket---3-6-2014
I've gotten as far as getting the token, but now I can't do anything with it.
I guess some code could help to get to the 'websocket' part:
var hitbox = new HitBoxWebSocket();
public class HitBoxWebSocket { private static WebClient hitboxWebClient = new WebClient(); private static int connectServer = 0; private List<HitboxServerData> hitboxServerData = new List<HitboxServerData>(); struct HitboxServerData { public string server_id; public string server_type; public string server_name; public string server_host_name; public string server_location; public string server_ip; public string server_internal_ip; public string server_load; public string server_enabled; public string server_updated; } public HitBoxWebSocket() { hitboxWebClient.Proxy = null; hitboxServerData = JsonConvert.DeserializeObject<List<HitboxServerData>>(hitboxWebClient.DownloadString(@"http://api.hitbox.tv/chat/servers")); ConnectHitboxServer(0); } public static void HitboxCleanup() { hitboxWebClient.Dispose(); } private void ConnectHitboxServer(int server) { connectServer = server; try { var hitboxJsonServerData = hitboxWebClient.DownloadString(string.Format(@"http://{0}/socket.io/1/", hitboxServerData[connectServer].server_ip)); var connectionId = hitboxJsonServerData.Split(':')[0]; Console.WriteLine(connectionId); } catch (Exception ex) { if (connectServer < hitboxServerData.Count) { ConnectHitboxServer(++connectServer); } else { LogItem.WriteLogFile(@"Hitbox", @"Connecting", 4, "Connection failed", "ConnectHitboxServer"); throw; } } } }
-
I've done this before, let me see if I can dig out some code.
EDIT: Goddamned, I didn't save it. Sorry guys.
I can say this:
- A lot of sites require the use of the wss protocol instead of ws
- A lot of sites require that you send a JSON object to authenticate within X milliseconds of opening the stream, or it'll immediately be closed again
- No goddamned web sockets implementation works like any other anywhere in the world ever. The one I was working with was Webtrends' streaming analytics data feature, even if I had the working code for that, there's no guarantee it'd work for Hitbox.tv.