using System; using System.IO; using Lumpio.Gif; using System.Drawing; using System.Drawing.Imaging; using System.Net; using System.Net.Sockets; using System.Collections; namespace Lumpio.Tests.Gif { public class GifWriterTest { public static void Main() { new GifWriterTest(); } public GifWriterTest() { byte[] http = System.Text.Encoding.UTF8.GetBytes("HTTP/1.1 200 OK\r\nConnection: close;\r\nContent-type: image/gif\r\n\r\n"); GifWriter gw = new GifWriter(65, 65, null); gw.Palette[0] = Color.FromArgb(0xFFFFFF); gw.Palette[1] = Color.FromArgb(0x000000); gw.Palette[2] = Color.FromArgb(0x808080); gw.Palette[3] = Color.FromArgb(0xAAAAAA); gw.BgColor = 0; Socket serverSocket; ArrayList clients = new ArrayList(); serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); serverSocket.Blocking = false; serverSocket.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.11"), 1234)); serverSocket.Listen(10); byte[] image; Console.WriteLine("Listening now"); while (true) { if (serverSocket.Poll(0, SelectMode.SelectRead)) { Socket sock = serverSocket.Accept(); clients.Add(sock); Console.WriteLine("Client connected from {0}", ((IPEndPoint)sock.RemoteEndPoint).Address); sock.Send(http); sock.Send(gw.GetHeaders()); } image = gw.GetFrame(renderClock(65, 65)); for (int i = 0; i < clients.Count; ++i) { Socket client = (Socket)clients[i]; try { client.Send(image); } catch (SocketException e) { Console.WriteLine("Client disconnected"/*, ((IPEndPoint)client.RemoteEndPoint).Address*/); clients.RemoveAt(i); --i; } } System.Threading.Thread.Sleep(1000); } } private byte[] renderClock(int width, int height) { byte[] data = new byte[width * height]; double minAngle, hourAngle, secAngle, a, r; int x, y; for (int i = 0; i < width * height; ++i) { data[i] = 0; } for (a = 0; a < Math.PI * 2; a += Math.PI / 6) { x = (int)(Math.Cos(a) * 32) + 32; y = (int)(-Math.Sin(a) * 32) + 32; data[y * 65 + x] = 1; } DateTime now = DateTime.Now; minAngle = (-Math.PI / 30) * now.Minute + (Math.PI / 2); hourAngle = (-Math.PI / 6) * now.Hour + (Math.PI / 2) + (-Math.PI / 360) * now.Minute; secAngle = (-Math.PI / 30) * now.Second + (Math.PI / 2); for (r = 0; r < 30; r++) { x = (int)(Math.Cos(hourAngle) * r) + 32; y = (int)(-Math.Sin(hourAngle) * r) + 32; data[y * width + x] = 1; } for (r = 0; r < 28; r++) { x = (int)(Math.Cos(minAngle) * r) + 32; y = (int)(-Math.Sin(minAngle) * r) + 32; data[y * width + x] = 2; } for (r = 0; r < 26; r++) { x = (int)(Math.Cos(secAngle) * r) + 32; y = (int)(-Math.Sin(secAngle) * r) + 32; data[y * width + x] = 3; } return data; } } }