예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        private void SendCallback(IAsyncResult AsyncResult)
        {
            IdentifiableSocket IdentifiableSocket = (IdentifiableSocket)AsyncResult.AsyncState;

            IdentifiableSocket.Socket.EndSend(AsyncResult);
        }