/// <summary> /// Stops the server totally and disconnect all connections. /// </summary> public void Stop() { Message message = new Message(Configuration.localUser, null, "UserDisconnect"); if (ConnectionOverClient) { tcpClient.Send(Message.GenerateTCPNotify(message)); } else if (connectionOverServer) { tcpServer.Send(control.GraphicControl.CurrentlyActiveChatUser, Message.GenerateTCPNotify(message)); } tcpServer.Stop(); tcpClient.Disconnect(); }
/// <summary> /// Generates a message of type TCPNotfy;fromUserName;fromUserId;message /// </summary> /// <param name="message"></param> /// <returns></returns> public static string GenerateTCPNotify(Message message) { return "TCPNotify;" + message.FromUser.Name + ";" + message.FromUser.Id + ";;;" + message.MessageContent; }
/// <summary> /// Generates a message of type TCPMessage;fromUserName;fromUserId;toUserName;toUserId,message /// </summary> /// <param name="message"></param> /// <returns></returns> public static string GenerateTCPMessage(Message message) { return "TCPMessage;" + message.FromUser.Name + ";" + message.FromUser.Id + ";" + message.ToUser.Name + ";" + message.ToUser.Id + ";" + message.MessageContent; }
/// <summary> /// Send a notfiy message to the current open connection /// </summary> /// <param name="message"></param> /// <returns></returns> internal bool SendNotify(Message message) { if (ConnectionOverClient) { tcpClient.Send(Message.GenerateTCPNotify(message)); } else if (ConnectionOverServer) { tcpServer.Send(message.ToUser, Message.GenerateTCPNotify(message)); } else { Logger.LogError("There is currently no connection!"); return false; } return true; }
internal void SetConnectionInformation(Message message) { control.GraphicControl.InitiateCurrentlyActiveUser(message); }
/// <summary> /// Send the username Change to the remote connection /// </summary> /// <param name="message"></param> internal void RenameUsernameNotifyRemote(Message message) { SendNotify(message); }
/// <summary> /// Informs the graphical interface about a new currently active user /// </summary> /// <param name="message"></param> internal void NoftifyFromCurrentUser(Message message) { if (message.MessageContent.StartsWith("UserDisconnect")) { if (connectionOverClient) { CloseConnectionFromClient(); } else if (connectionOverServer) { CloseConnectionFromServer(); } } else if (message.MessageContent.StartsWith("Rename:")) { control.GraphicControl.InitiateCurrentlyActiveUser(message); } }
/// <summary> /// Manages an incoming message from the client. Send message to graphic controller /// </summary> /// <param name="content"></param> internal void IncomingMessage(Message content) { if (content.FromUser.Equals(control.GraphicControl.CurrentlyActiveChatUser) || control.GraphicControl.CurrentlyActiveChatUser == null) { control.GraphicControl.ReceiveMessage(content); } }
/// <summary> /// Notifys the Gui Thread when there is a new connection established. /// </summary> /// <param name="tcpAcceptMessage"></param> internal void IncomingConnectionFromServer(Message tcpAcceptMessage) { lock (incomingConnectionLock) { if (!ConnectionOverClient && !ConnectionOverServer) { ConnectionOverServer = true; control.GraphicControl.CurrentlyActiveChatUser = new ExtendedUser(tcpAcceptMessage.FromUser); } } }
/// <summary> /// Adds the socket to the connection list, if not exisiting /// </summary> /// <param name="message"></param> /// <param name="handle"></param> internal void AddSocketToList(Socket handle, Message message) { /* Add the new contact to the connection list */ bool isAlreadyInList = false; ExtendedUser exUser = ExtendedUser.ParseFromMessage(message); foreach (UserConnection uc in ConnectionList) { if (uc.Equals(exUser)) { isAlreadyInList = true; break; } } if (!isAlreadyInList) { Logger.LogInfo("Add user " + (message.FromUser == null) + " " + (message.ToUser == null) + " "); ConnectionList.AddLast(new UserConnection(exUser, handle)); } }