static Action <ChatClient, string> CreateMessageRoute(ChatClient To, string FileName) { return((This, Msg) => { File.AppendAllText(FileName, Print("{0} to {1}: {2}", This, To, Msg)); ChatServer.SendMessage(Msg, MessageType.ChatMessage, To); }); }
public static void Enqueue(ChatClient C) { lock (Clients) { Remove(C); Clients.AddLast(C); ChatServer.SendMessage("Queueing for partner", MessageType.ServerInfo, C); } }
static Action <ChatClient> CreateClosedRoute(ChatClient To) { return((This) => { To.OnMessageEvent = This.OnMessageEvent = null; To.OnClosedEvent = This.OnClosedEvent = null; Print("{0} and {1} unlinked", This, To); ChatServer.SendMessage("Other party disconnected", MessageType.ServerInfo, To); Lobby.Enqueue(To); }); }
static void Main(string[] args) { Console.Title = "BlackCarp"; ChatServer.Init(); int LogFile = 0; StartThread(() => { while (true) { while (Lobby.GetCount() < 2) { Thread.Sleep(100); } ChatClient A = Lobby.Dequeue(); ChatClient B = Lobby.Dequeue(); string LogFileName = "log_" + LogFile + ".txt"; LogFile++; A.OnMessageEvent = CreateMessageRoute(B, LogFileName); A.OnClosedEvent = CreateClosedRoute(B); B.OnMessageEvent = CreateMessageRoute(A, LogFileName); B.OnClosedEvent = CreateClosedRoute(A); Print("{0} and {1} linked", A, B); ChatServer.SendMessage("Found partner", MessageType.ServerInfo, new[] { A, B }); } }); StartThread(() => { while (true) { Thread.Sleep(10000); ChatServer.Purge(); } }); Print("Server started"); while (true) { Thread.Sleep(1000); } }