public void UpdateThumbnails() { for (int i = 0; i < serversOnListCount; i++) { ServerOnList server = serversOnList[i]; if (server == null) { continue; } if (server.thumbnailFetched) { //Thumbnail already loaded continue; } if (!server.thumbnailDownloading) { //Not started downloading yet thumbResponses[i] = new ThumbnailResponseCi(); menu.p.ThumbnailDownloadAsync(server.ip, server.port, thumbResponses[i]); server.thumbnailDownloading = true; } else { //Download in progress if (thumbResponses[i] != null) { if (thumbResponses[i].done) { //Request completed. load received bitmap BitmapCi bmp = menu.p.BitmapCreateFromPng(thumbResponses[i].data, thumbResponses[i].dataLength); if (bmp != null) { int texture = menu.p.LoadTextureFromBitmap(bmp); menu.textures.Set(menu.p.StringFormat("serverlist_entry_{0}.png", server.hash), texture); menu.p.BitmapDelete(bmp); } server.thumbnailDownloading = false; server.thumbnailFetched = true; } if (thumbResponses[i].error) { //Error while trying to download thumbnail server.thumbnailDownloading = false; server.thumbnailError = true; server.thumbnailFetched = true; } } else { //An error occured. stop trying server.thumbnailDownloading = false; server.thumbnailError = true; server.thumbnailFetched = true; } } } }
public ScreenMultiplayer() { WidgetCount = 64 + serverButtonsCount; widgets = new MenuWidget[WidgetCount]; back = new MenuWidget(); back.text = "Back"; back.type = WidgetType.Button; back.nextWidget = 1; connect = new MenuWidget(); connect.text = "Connect"; connect.type = WidgetType.Button; connect.nextWidget = 3; connectToIp = new MenuWidget(); connectToIp.text = "Connect to IP"; connectToIp.type = WidgetType.Button; connectToIp.nextWidget = 2; refresh = new MenuWidget(); refresh.text = "Refresh"; refresh.type = WidgetType.Button; refresh.nextWidget = 0; page = 0; pageUp = new MenuWidget(); pageUp.text = ""; pageUp.type = WidgetType.Button; pageUp.buttonStyle = ButtonStyle.Text; pageUp.visible = false; pageDown = new MenuWidget(); pageDown.text = ""; pageDown.type = WidgetType.Button; pageDown.buttonStyle = ButtonStyle.Text; pageDown.visible = false; loggedInName = new MenuWidget(); loggedInName.text = ""; loggedInName.type = WidgetType.Button; loggedInName.buttonStyle = ButtonStyle.Text; logout = new MenuWidget(); logout.text = ""; logout.type = WidgetType.Button; //logout.image = "serverlist_entry_background.png"; logout.buttonStyle = ButtonStyle.Button; title = "Multiplayer"; fontServerHeading = new FontCi(); fontServerHeading.style = 1; fontServerHeading.size = 14; fontServerDescription = new FontCi(); fontDefault = new FontCi(); fontDefault.size = 14; widgets[0] = back; widgets[1] = connect; widgets[2] = refresh; widgets[3] = connectToIp; widgets[4] = pageUp; widgets[5] = pageDown; widgets[6] = loggedInName; widgets[7] = logout; serverListAddress = new HttpResponseCi(); serverListCsv = new HttpResponseCi(); serversOnList = new ServerOnList[serversOnListCount]; thumbResponses = new ThumbnailResponseCi[serversOnListCount]; serverButtons = new MenuWidget[serverButtonsCount]; for (int i = 0; i < serverButtonsCount; i++) { MenuWidget b = new MenuWidget(); b = new MenuWidget(); b.text = "Invalid"; b.type = WidgetType.Button; b.visible = false; b.image = "serverlist_entry_noimage.png"; serverButtons[i] = b; widgets[8 + i] = b; } loading = true; }
public abstract void ThumbnailDownloadAsync(string ip, int port, ThumbnailResponseCi response);
public override void ThumbnailDownloadAsync(string ip, int port, ThumbnailResponseCi response) { ThumbnailDownloadArgs args = new ThumbnailDownloadArgs(); args.ip = ip; args.port = port; args.response = response; ThreadPool.QueueUserWorkItem(DownloadServerThumbnail, args); }