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; } } } }
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(); }