public async void ReadMessage() { await Task.Run(() => { try { var buffer = new byte[1028]; int numOfBytes; while (Socket.IsConnected && !Reading) { numOfBytes = inputStream.Read(buffer, 0, buffer.Length); Reading = true; if (numOfBytes > 0) { string message = Encoding.ASCII.GetString(buffer); if (BGStuff.settingUpGame) { if (message.Contains("resume")) { Device.BeginInvokeOnMainThread(() => { BGStuff.setupGame.ReceiveResume(); }); } else if (message.Contains("accept")) { Device.BeginInvokeOnMainThread(() => { BGStuff.setupGame.AcceptResume(); }); } else if (message.Contains("reject")) { Device.BeginInvokeOnMainThread(() => { BGStuff.setupGame.RejectResume(); }); } else if (message.Contains("Setup2")) { Device.BeginInvokeOnMainThread(() => { SetupGame.StatGoToSetup2(); }); } else if (message.Contains(",")) { string[] split; split = message.Split(','); if (split[1].Contains("grid")) { Device.BeginInvokeOnMainThread(() => { SetupGame.StatSetPicker(split[0]); }); } else if (split[1].Contains("num")) { Device.BeginInvokeOnMainThread(() => { SetupGame.StatSetNumOfShotsEntry(split[0]); }); } else if (split[1].Contains("nam")) { Device.BeginInvokeOnMainThread(() => { SetupGame.StatSetEnemyName(split[0]); }); } } } else if (BGStuff.settingUpGame2) { if (message.Contains("unready")) { Device.BeginInvokeOnMainThread(() => { BGStuff.setUpGame2.SetEnemyReady(false); }); } else if (message.Contains("ready")) { Device.BeginInvokeOnMainThread(() => { BGStuff.setUpGame2.SetEnemyReady(true); }); } } else if (BGStuff.InGame) { if (message.Contains("hit")) { Device.BeginInvokeOnMainThread(() => { BGStuff.game.ReceiveHit(true); }); } else if (message.Contains("miss")) { Device.BeginInvokeOnMainThread(() => { BGStuff.game.ReceiveHit(false); }); } else if (message.Contains("ready")) { Device.BeginInvokeOnMainThread(() => { BGStuff.game.Ready(); }); } else if (message.Contains("endgame")) { Device.BeginInvokeOnMainThread(() => { BGStuff.game.EndGame(false); }); } else if (message.Contains(",")) { string[] split = message.Split(','); int len = split[0].Length; string temp = ""; for (int i = 0; i < len; i++) { temp += split[1][i]; } Device.BeginInvokeOnMainThread(() => { BGStuff.game.ReceiveCheck(split[0] + "," + temp); }); } else if (message.Contains("0") || message.Contains("1")) { Device.BeginInvokeOnMainThread(() => { BGStuff.game.GoesFirst(int.Parse(message)); }); } buffer = new byte[1028]; } } Reading = false; } } catch (Exception ex) { Device.BeginInvokeOnMainThread(() => { ToastLoader toast = new ToastLoader(); toast.Show("Connection Lost"); if (BGStuff.settingUpGame) { BGStuff.setupGame.Reconnect(); } else if (BGStuff.settingUpGame2) { BGStuff.setUpGame2.Reconnect(); } else if (BGStuff.InGame) { BGStuff.game.Reconnect(); } }); Reconnect(); } }); }