コード例 #1
0
        private void WaitForMessage()
        {
            while (true)
            {
                byte[] receivedMessage = new byte[0];
                if (configured.receiveData(ref receivedMessage))
                {
                    if (receivedMessage.Length != 0)
                    {
                        //now check if the message has content, how long the parts are and who has send the message

                        if (Convert.ToBoolean(receivedMessage[0]))
                        {
                            byte UserLenght    = receivedMessage[1];
                            byte MessageLenght = receivedMessage[2];
                            byte contentLenght = receivedMessage[3];

                            //now make the User Object
                            byte[] messageUser = new byte[UserLenght];
                            for (int i = 4; i < UserLenght + 4; i++)
                            {
                                messageUser[i - 4] = receivedMessage[i];
                            }
                            BinaryFormatter formatter = new BinaryFormatter();
                            MemoryStream    ms        = new MemoryStream();
                            ms.Write(messageUser, 0, messageUser.Length);
                            ms.Seek(0, SeekOrigin.Begin);
                            LastOnline = (User)formatter.Deserialize(ms);
                            ms.Close();
                            //now get the message string
                            byte[] messageContentInByte = new byte[MessageLenght];
                            for (int i = 4 + UserLenght; i < 4 + UserLenght + MessageLenght; i++)
                            {
                                messageContentInByte[i - (4 + UserLenght)] = receivedMessage[i];
                            }
                            //now create the string
                            string messagecontent = ConvertAsciiToMessage(messageContentInByte);

                            //now get the image
                            byte[] ImageInByte = new byte[contentLenght];
                            for (int i = 4 + UserLenght + MessageLenght; i < 4 + MessageLenght + UserLenght + contentLenght; i++)
                            {
                                ImageInByte[i - (4 + UserLenght + MessageLenght)] = receivedMessage[i];
                            }
                            //now make the Image
                            ms = new MemoryStream();
                            ms.Write(ImageInByte, 0, ImageInByte.Length);
                            ms.Seek(0, SeekOrigin.Begin);
                            Image receivedImage = (Image)formatter.Deserialize(ms);

                            //now look if that user had already send a message
                            bool alreadyInList = false;
                            for (int i = 0; i < allMessages.Length; i++)
                            {
                                if (alreadyInList != true)
                                {
                                    User check = allMessages[i].getChatPartner();
                                    if (check.getName() == LastOnline.getName())
                                    {
                                        allMessages[i].AddMessage("{B}" + messagecontent);
                                        allMessages[i].AddPicture(receivedImage);
                                        alreadyInList = true;
                                    }
                                }
                            }
                            if (alreadyInList != true)
                            {
                                //create a new Message
                                Message newMessage = new Message(LastOnline);
                                newMessage.AddMessage("{B}" + messagecontent);
                                newMessage.AddPicture(receivedImage);
                                Message[] saveOldMessages = allMessages;
                                allMessages = new Message[saveOldMessages.Length + 1];

                                for (int i = 0; i < saveOldMessages.Length; i++)
                                {
                                    allMessages[i] = saveOldMessages[i];
                                }
                                allMessages[saveOldMessages.Length] = newMessage;
                            }
                        }
                        else
                        {
                            byte UserLenght    = receivedMessage[1];
                            byte MessageLenght = receivedMessage[2];

                            //now make the User Object
                            byte[] messageUser = new byte[UserLenght];
                            for (int i = 3; i < UserLenght + 3; i++)
                            {
                                messageUser[i - 3] = receivedMessage[i];
                            }
                            BinaryFormatter formatter = new BinaryFormatter();
                            MemoryStream    ms        = new MemoryStream();
                            ms.Write(messageUser, 0, messageUser.Length);
                            ms.Seek(0, SeekOrigin.Begin);
                            LastOnline = (User)formatter.Deserialize(ms);
                            ms.Close();
                            //now get the message string
                            byte[] messageContentInByte = new byte[MessageLenght];
                            for (int i = 3 + UserLenght; i < 3 + UserLenght + MessageLenght; i++)
                            {
                                messageContentInByte[i - (3 + UserLenght)] = receivedMessage[i];
                            }
                            //now create the string
                            string messagecontent = ConvertAsciiToMessage(messageContentInByte);

                            //now look if that user had already send a message
                            bool alreadyInList = false;
                            for (int i = 0; i < allMessages.Length; i++)
                            {
                                if (alreadyInList != true)
                                {
                                    User check = allMessages[i].getChatPartner();
                                    if (check.getName() == LastOnline.getName())
                                    {
                                        allMessages[i].AddMessage("{B}" + messagecontent);
                                        alreadyInList = true;
                                    }
                                }
                            }
                            if (alreadyInList != true)
                            {
                                //create a new Message
                                Message newMessage = new Message(LastOnline);
                                newMessage.AddMessage("{B}" + messagecontent);
                                Message[] saveOldMessages = allMessages;
                                allMessages = new Message[saveOldMessages.Length + 1];

                                for (int i = 0; i < saveOldMessages.Length; i++)
                                {
                                    allMessages[i] = saveOldMessages[i];
                                }
                                allMessages[saveOldMessages.Length] = newMessage;
                            }
                        }
                        //now send information about yourself
                        sendLock = true;
                        MemoryStream    sm       = new MemoryStream();
                        BinaryFormatter formater = new BinaryFormatter();
                        formater.Serialize(sm, currentUser);
                        byte[] currentUserinByte = sm.ToArray();
                        configured.SendData(currentUserinByte);
                        Thread.Sleep(100);
                        sendLock = false;
                    }
                }
            }
        }
コード例 #2
0
        private void waitForAnswer()
        {
            while (waitAnswer)
            {
                Thread.Sleep(100);
                byte[] receivedPackage = new byte[0];
                if (configured.receiveData(ref receivedPackage))
                {
                    if (receivedPackage.Length != 0)
                    {
                        //try to desirealize
                        MemoryStream ms = new MemoryStream();
                        ms.Write(receivedPackage, 0, receivedPackage.Length);
                        BinaryFormatter formatter = new BinaryFormatter();
                        ms.Seek(0, SeekOrigin.Begin);
                        try
                        {
                            LastOnline = (User)formatter.Deserialize(ms);
                            waitAnswer = false;
                        }
                        catch
                        {
                            waitAnswer = true;
                        }
                    }
                }
            }
            //now look if there is already a Message Storage for that User
            bool found = false;

            for (int i = 0; i < allMessages.Length; i++)
            {
                if (found != true)
                {
                    Message currentMessage = allMessages[i];
                    User    messageUser    = currentMessage.getChatPartner();
                    if (messageUser.getName() == LastOnline.getName())
                    {
                        found = true;
                        allMessages[i].AddMessage("{A}" + orderbalemessage);
                        if (oderableImage != null)
                        {
                            allMessages[i].AddPicture(oderableImage);
                        }
                        oderableImage    = null;
                        orderbalemessage = null;
                    }
                }
            }
            if (found != true)
            {
                //create new Message
                Message newMessage = new Message(LastOnline);
                newMessage.AddMessage("{A}" + orderbalemessage);
                if (oderableImage != null)
                {
                    newMessage.AddPicture(oderableImage);
                }
                oderableImage    = null;
                orderbalemessage = null;
                //now save it in the array
                Message[] saved = allMessages;
                allMessages = new Message[saved.Length + 1];
                for (int i = 0; i < saved.Length; i++)
                {
                    allMessages[i] = saved[i];
                }
                allMessages[saved.Length] = newMessage;
            }
            //now start the receive Message Thread
            RefreshContent = new Thread(WaitForMessage);
            RefreshContent.Start();
        }