public static void SendMessage(string From, string Message, string Receiver, string MessageType) { // overwrite message with specific user info message if (MessageType == Chatmessage.MESSAGE_TYPE_USER_INFO) { Message = "Login: "******" " + ChatServer.userInfos[From].LoginTime.ToLongTimeString() + Environment.NewLine + "Operating System: " + ChatServer.userInfos[From].OperatingSystem.VersionString; } Chatmessage userMessage = new Chatmessage(From, Receiver, Message, MessageType); e = new StatusChangedEventArgs(userMessage); OnStatusChanged(e); if (Receiver == "global") { foreach (KeyValuePair <string, User> entry in ChatServer.userInfos) { sendMessage(userMessage, entry.Value); } } else { sendMessage(userMessage, ChatServer.userInfos[Receiver]); } }
public void openUserInfo(object sender, EventArgs e) { Chatmessage message = new Chatmessage(); message.MessageType = Chatmessage.MESSAGE_TYPE_USER_INFO; message.Transmitter = txtUser.Text; message.Receiver = listUser.SelectedItem.ToString(); message.Message = "userInfo"; _client.sendMessage(message); }
public void sendMessage(string message, string receiver) { Chatmessage chatMessage = new Chatmessage(); chatMessage.Transmitter = _user; chatMessage.Receiver = receiver; chatMessage.Message = message; byte[] msg = _clientEncryption.EncryptRijndael(Converter.fromObjectToByteArray(chatMessage)); sendMessage(msg); }
public static void SendAdminMessage(string Message) { Chatmessage adminMessage = new Chatmessage("Administrator", "global", Message, Library.Chatmessage.MESSAGE_TYPE_MESSAGE); e = new StatusChangedEventArgs(adminMessage); OnStatusChanged(e); foreach (KeyValuePair <string, User> entry in ChatServer.userInfos) { sendMessage(adminMessage, entry.Value); } }
public void closeConnection() { if (connected) { connected = false; Chatmessage message = new Chatmessage(); message.Transmitter = _user; message.Receiver = "global"; message.Message = "Goodbye"; message.MessageType = Chatmessage.MESSAGE_TYPE_DISCONNECT; sendMessage(message); } _users.Clear(); }
private void ReceiveMessages() { Int32 messageLength = Convert.ToInt32(_srReceiver.ReadInt32()); byte[] response = new byte[messageLength]; response = _srReceiver.ReadBytes(messageLength); Chatmessage ConResponse = (Chatmessage)Converter.fromByteArrayToObject(_clientEncryption.DecryptRijndael(response)); if (ConResponse.Message[0] == '1') { ConResponse.Message = ConResponse.Message.Substring(2); e = new StatusChangedEventArgs(ConResponse); OnStatusChanged(e); // read actual user list from server BinaryFormatter bf = new BinaryFormatter(); messageLength = Convert.ToInt32(_srReceiver.ReadInt32()); response = new byte[messageLength]; response = _srReceiver.ReadBytes(messageLength); MemoryStream ms = new MemoryStream(response); List <string> user = (List <string>)bf.Deserialize(ms); foreach (var element in user) { _users.Add(element); } } else if (ConResponse.Message[0] == '0') { connected = false; string Reason = "Not Connected! - "; Reason += ConResponse.Message.Substring(2, ConResponse.Message.Length - 2); e = new StatusChangedEventArgs(ConResponse); OnStatusChanged(e); return; } while (connected) { messageLength = Convert.ToInt32(_srReceiver.ReadInt32()); response = new byte[messageLength]; response = _srReceiver.ReadBytes(messageLength); e = new StatusChangedEventArgs((Chatmessage)Converter.fromByteArrayToObject(_clientEncryption.DecryptRijndael(response))); OnStatusChanged(e); } }
private void UpdateStatus(Chatmessage message) { if (message.MessageType == Chatmessage.MESSAGE_TYPE_USER_INFO) { return; } if (message.Transmitter == "Administrator") { UpdateStatus(message.Message); } else { if (System.Configuration.ConfigurationManager.AppSettings["LogUserMessages"] == "true") { UpdateStatus(message.Message); } } }
protected static void sendMessage(Chatmessage message, User user) { BinaryWriter swSender; try { Encryption tmp = user.Encryption; swSender = new BinaryWriter(user.TcpClient.GetStream()); byte[] sendMessage = tmp.EncryptRijndael(Converter.fromObjectToByteArray(message)); swSender.Write(sendMessage.Length); swSender.Flush(); swSender.Write(sendMessage); swSender.Flush(); swSender = null; } catch { RemoveUser(user.Username); } }
public void sendMessage(Chatmessage message) { byte[] msg = _clientEncryption.EncryptRijndael(Converter.fromObjectToByteArray(message)); sendMessage(msg); }
private void AcceptClient() { srReceiver = new System.IO.BinaryReader(tcpClient.GetStream()); swSender = new System.IO.BinaryWriter(tcpClient.GetStream()); byte[] answer; byte[] response; Int32 length; // lese laenge von pub key von client length = srReceiver.ReadInt32(); // empfange client pub key response = new byte[length]; response = srReceiver.ReadBytes(length); string clientPubKey = Converter.fromByteArrayToString(response); Encryption clientEncryption = new Encryption(clientPubKey); // sende mit client pub key verschlüsselt rij key + iv answer = clientEncryption.EncryptRSA(serverEncryption.getRijKey()); sendMessage(answer); answer = clientEncryption.EncryptRSA(serverEncryption.getRijIV()); sendMessage(answer); // empfange chatmessage objekt mit usernamen signature und message length = srReceiver.ReadInt32(); response = new byte[length]; response = srReceiver.ReadBytes(length); Chatmessage message = (Chatmessage)Converter.fromByteArrayToObject(serverEncryption.DecryptRijndael(response)); int pos = 0; if (message.Signature != _acceptedSignature) { pos = -1; } currUser = message.Transmitter; if (currUser != "") { Chatmessage serverResponse = new Chatmessage(); serverResponse.Transmitter = "Administrator"; serverResponse.Receiver = currUser; if (pos == -1) { serverResponse.Message = "0|Wrong Client."; byte[] msg = serverEncryption.EncryptRijndael(Converter.fromObjectToByteArray(serverResponse)); sendMessage(msg); CloseConnection(); return; } else if (ChatServer.userInfos.ContainsKey(currUser) == true) { serverResponse.Message = "0|This username already exists."; byte[] msg = serverEncryption.EncryptRijndael(Converter.fromObjectToByteArray(serverResponse)); sendMessage(msg); CloseConnection(); return; } else if (currUser == "Administrator") { serverResponse.Message = "0|This username is reserved."; byte[] msg = serverEncryption.EncryptRijndael(Converter.fromObjectToByteArray(serverResponse)); sendMessage(msg); CloseConnection(); return; } else { serverResponse.Message = "1|Connected Successfully"; byte[] msg = serverEncryption.EncryptRijndael(Converter.fromObjectToByteArray(serverResponse)); sendMessage(msg); // send actual user list MemoryStream stream = new MemoryStream(); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(stream, ChatServer.users); msg = stream.ToArray(); sendMessage(msg); // add new user ChatServer.AddUser(tcpClient, currUser, serverEncryption, message.OperatingSystem); } } else { CloseConnection(); return; } try { while ((length = Convert.ToInt32(srReceiver.ReadInt32())) != 0) { response = new byte[length]; response = srReceiver.ReadBytes(length); var rawResponse = Converter.fromByteArrayToObject(serverEncryption.DecryptRijndael(response)); Chatmessage chatResponse = (Chatmessage)rawResponse; switch (chatResponse.MessageType) { case Chatmessage.MESSAGE_TYPE_DISCONNECT: // client wants do disconnect ChatServer.RemoveUser(currUser); break; case Chatmessage.MESSAGE_TYPE_USER_INFO: // send user info of a user to client ChatServer.SendMessage(currUser, chatResponse.Message, chatResponse.Receiver, Chatmessage.MESSAGE_TYPE_USER_INFO); break; case Chatmessage.MESSAGE_TYPE_MESSAGE: default: // normal chat message or default behaviour if (chatResponse.Message.Length > 0) { ChatServer.SendMessage(currUser, chatResponse.Message, chatResponse.Receiver, Chatmessage.MESSAGE_TYPE_MESSAGE); } else { ChatServer.RemoveUser(currUser); } break; } } } catch { ChatServer.RemoveUser(currUser); } }