コード例 #1
0
ファイル: Message.cs プロジェクト: astpeepman/ClientServer2
 public Message()
 {
     m_Header       = new MsgHeaderProto();
     m_Header.MTo   = "";
     m_Header.MFrom = "";
     m_Header.MSize = -1;
     m_Header.MType = -1;
 }
コード例 #2
0
ファイル: Message.cs プロジェクト: astpeepman/ClientServer2
 public static string SerializeToString_PB(MsgHeaderProto m)
 {
     using (MemoryStream ms = new MemoryStream())
     {
         m.WriteTo(ms);
         return(Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length));
     }
 }
コード例 #3
0
ファイル: Message.cs プロジェクト: astpeepman/ClientServer2
 public Message(string To, string From, Messages Type = Messages.M_TEXT, string Data = "")
 {
     m_Header       = new MsgHeaderProto();
     m_Header.MTo   = To;
     m_Header.MFrom = From;
     m_Header.MType = (int)Type;
     m_Data         = Data;
     m_Header.MSize = Data.Length;
 }
コード例 #4
0
        static bool ConnectToServer(Message msg, MsgHeaderProto msgHeader)
        {
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            canalStart(s);
            int len = Password.Length;

            msg.SendMessage(s, "@SERVER", Login, Messages.M_INIT);
            msgHeader = msg.Receive(s);
            if (msgHeader.MType == (int)Messages.M_CONFIRM)
            {
                s.Send(BitConverter.GetBytes(len), sizeof(int), SocketFlags.None);
                s.Send(Encoding.UTF8.GetBytes(Password), len, SocketFlags.None);
            }

            msgHeader = msg.Receive(s);
            canalStop(s);

            if (msgHeader.MType == (int)Messages.M_CONFIRM)
            {
                hMutex.WaitOne();
                Console.Write("You have successfully connected to the server");
                hMutex.ReleaseMutex();
                Thread getDataThread = new Thread(getData);
                getDataThread.Start();
                return(true);
            }
            else if (msgHeader.MType == (int)Messages.M_INCORRECT)
            {
                hMutex.WaitOne();
                Console.WriteLine("Sorry, wrong password");
                hMutex.ReleaseMutex();
                return(false);
            }
            else if (msgHeader.MType == (int)Messages.M_ACTIVE)
            {
                hMutex.WaitOne();
                Console.WriteLine("Sorry, this user is already connected. " +
                                  "You cannot run one account on different clients");
                hMutex.ReleaseMutex();
                return(false);
            }
            else
            {
                hMutex.WaitOne();
                Console.WriteLine("Something went wrong");
                hMutex.ReleaseMutex();
                return(false);
            }
        }
コード例 #5
0
 static void getData()
 {
     while (true)
     {
         Socket  s   = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
         Message msg = new Message();
         canalStart(s);
         msg.SendMessage(s, "@SERVER", Login, Messages.M_GETDATA);
         MsgHeaderProto msgHeader = msg.Receive(s);
         canalStop(s);
         if (msgHeader.MType == (int)Messages.M_TEXT)
         {
             Console.Write("Message from client " + msgHeader.MFrom + ": " + msg.getM_Data());
         }
     }
 }
コード例 #6
0
ファイル: Message.cs プロジェクト: astpeepman/ClientServer2
        public MsgHeaderProto Receive(Socket s)
        {
            byte[] b = new byte[4];
            s.Receive(b, sizeof(int), SocketFlags.None);
            int bufferSize = BitConverter.ToInt32(b, 0);

            b = new byte[bufferSize];
            s.Receive(b, bufferSize, SocketFlags.None);
            StringBuilder builder = new StringBuilder();

            builder.Append(Encoding.UTF8.GetString(b, 0, bufferSize));
            m_Header = DeserializeFromString_PB(builder.ToString());

            if (m_Header.MType == (int)Messages.M_TEXT)
            {
                b = new byte[m_Header.MSize];
                s.Receive(b, m_Header.MSize, SocketFlags.None);
                builder = new StringBuilder();
                builder.Append(Encoding.UTF8.GetString(b, 0, m_Header.MSize));
                m_Data = builder.ToString();
            }
            return(m_Header);
        }
コード例 #7
0
        static void Main(string[] args)
        {
            Message        msg       = new Message();
            MsgHeaderProto msgHeader = new MsgHeaderProto();
            int            answer;
            bool           flag = true;

            while (flag)
            {
                Console.WriteLine("Want to connect to a server? (0/1)");
                answer = Convert.ToInt32(Console.ReadLine());
                switch (answer)
                {
                case 0: return;

                case 1:
                {
                    Console.WriteLine("Enter your login");
                    Login = Console.ReadLine().ToString();
                    Console.WriteLine("Enter your password");
                    Password = Console.ReadLine().ToString();

                    if (!ConnectToServer(msg, msgHeader))
                    {
                        Console.WriteLine("Want to try some more? (0/1)");
                        answer = Convert.ToInt32(Console.ReadLine());
                        if (answer == 0)
                        {
                            return;
                        }
                    }
                    else
                    {
                        flag = false;
                    }

                    break;
                }

                default:
                {
                    Console.WriteLine("Please, press 0 or 1");
                    break;
                }
                }
            }

            while (true)
            {
                Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                Console.WriteLine("Press 0 for send Message\nPress 1 for Exit");
                answer = Convert.ToInt32(Console.ReadLine());
                switch (answer)
                {
                case 0:
                {
                    Console.WriteLine("Enter Login of client");
                    string ToLogin = Console.ReadLine().ToString();
                    Console.WriteLine("Enter your Message");
                    string str = Console.ReadLine().ToString();
                    canalStart(s);
                    msg.SendMessage(s, ToLogin, Login, Messages.M_TEXT, str);
                    msgHeader = msg.Receive(s);
                    canalStop(s);
                    hMutex.WaitOne();
                    if (msgHeader.MType == (int)Messages.M_INACTIVE)
                    {
                        Console.WriteLine("Your message will be delivered " +
                                          "as soon as the user connects");
                    }
                    else if (msgHeader.MType == (int)Messages.M_CONFIRM)
                    {
                        Console.WriteLine("The message was delivered successfully");
                    }
                    else if (msgHeader.MType == (int)Messages.M_ABSENT)
                    {
                        Console.WriteLine("The user you want to send a message to is not listed");
                    }
                    else
                    {
                        Console.WriteLine("Something went wrong");
                    }
                    hMutex.ReleaseMutex();
                    break;
                }

                case 1:
                {
                    canalStart(s);
                    msg.SendMessage(s, "@SERVER", Login, Messages.M_EXIT);
                    msgHeader = msg.Receive(s);
                    hMutex.WaitOne();
                    if (msgHeader.MType == (int)Messages.M_CONFIRM)
                    {
                        Console.WriteLine("You have successfully disconnected");
                    }
                    else if (msgHeader.MType == (int)Messages.M_INACTIVE)
                    {
                        Console.WriteLine("You have been disconnected by the server");
                    }
                    else
                    {
                        Console.WriteLine("An error has occurred");
                    }
                    hMutex.ReleaseMutex();
                    return;
                }
                }
            }
        }