public void SendMsgTo(string username, string msg) { IdentifiableSocket IS = ClientSockets.Where(CS => CS.Name == username).Single(); byte[] data = Encoding.ASCII.GetBytes(msg); IS.Socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), IS); IS.Socket.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), IS); }
private void AcceptCallback(IAsyncResult AsyncResult) { if (IgnoreCallback) { return; } IdentifiableSocket IdentifiableSocket = new IdentifiableSocket(Socket.EndAccept(AsyncResult)); ClientSockets.Add(IdentifiableSocket); Console.WriteLine("Client connected, waiting for request..."); IdentifiableSocket.Socket.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), IdentifiableSocket); Socket.BeginAccept(new AsyncCallback(AcceptCallback), null); }
private void ReceiveCallback(IAsyncResult AsyncResult) { IdentifiableSocket IdentifiableSocket = (IdentifiableSocket)AsyncResult.AsyncState; int received = IdentifiableSocket.Socket.EndReceive(AsyncResult); byte[] DataBuffer = new byte[received]; Array.Copy(Buffer, DataBuffer, received); string text = Encoding.ASCII.GetString(DataBuffer); string response = string.Empty; if (!IdentifiableSocket.IsIdentifiableByName) { IdentifiableSocket.SetName(text); Console.WriteLine("Client identified as {0}", text); response = "Client identified"; } else { Console.WriteLine("{0}: {1}", IdentifiableSocket.Name, text); switch (text) { case "commands": response = "commands: \n\tget time: \n\t\tgets the server time \n\texit: \n\t\texits the client \n\tcommands: \n\t\tshows a list of commands to execute"; break; case "get time": response = DateTime.Now.ToLongTimeString(); break; case "exit": IdentifiableSocket.Socket.Shutdown(SocketShutdown.Both); IdentifiableSocket.Socket.Close(); ClientSockets.Remove(IdentifiableSocket); Console.WriteLine("{0}: disconnected", IdentifiableSocket.Name); return; default: response = "Invalid Request, type \"commands\" to see a list of commands to execute"; break; } } byte[] data = Encoding.ASCII.GetBytes(response); IdentifiableSocket.Socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), IdentifiableSocket); IdentifiableSocket.Socket.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), IdentifiableSocket); }
private void SendCallback(IAsyncResult AsyncResult) { IdentifiableSocket IdentifiableSocket = (IdentifiableSocket)AsyncResult.AsyncState; IdentifiableSocket.Socket.EndSend(AsyncResult); }