public string ParseMessage(string Message)
        {
            int    UserID;
            String Type;
            String Contents;

            try
            {
                Type = Message.Substring(0, 4);
                Console.WriteLine("Message type " + Type);
                if (Message.Substring(4, 4) == "0000")
                {
                    UserID = 0;
                }
                else
                {
                    UserID = int.Parse((Message.Substring(4, 4)).TrimStart('0'));
                }
                Contents = Message.Substring(8);
                Console.WriteLine("User Id: " + UserID.ToString());
                Console.WriteLine("Message: " + Contents);
            }
            catch
            {
                return("Message Not Accepted");
            }

            if (Type != "PING" && UserID != 0 && !UserDict.ContainsKey(UserID))
            {
                return("User ID not accepted, message not processed");
            }

            switch (Type)
            {
            case "NWID":
                Console.WriteLine("New ID");
                if (UserID != 0 && UserDict.ContainsKey(UserID))
                {
                    return(UserID.ToString());
                }
                else
                {
                    for (int i = 1; i < 1000; i++)
                    {
                        if (!UserDict.ContainsKey(i))
                        {
                            UserDict.Add(i, new UserData(i, Contents, new List <String>()));
                            return(i.ToString());
                        }
                    }
                }
                break;

            case "CHLS":
                Console.WriteLine("List Channels");
                string output = "";
                foreach (String Name in ChannelDict.Keys)
                {
                    output = output + Name + ",";
                }
                output.Trim(',');
                return(output);

            case "CRCH":
                Console.WriteLine("Create Channel");
                if (ChannelDict.ContainsKey(Contents.Trim()))
                {
                    return("Already Exists");
                }
                else
                {
                    ChannelDict.Add(Contents.Trim(),
                                    new ChannelData(Contents.Trim(),
                                                    "Channel " + Contents.Trim() + " Started by " + UserDict[UserID].Alias + "\n",
                                                    new List <int>()));
                    ChannelDict[Contents.Trim()].Members.Add(UserID);
                    return("Channel Created");
                }

            case "JNCH":
                Console.WriteLine("Join Channel");
                if (ChannelDict.ContainsKey(Contents.Trim()))
                {
                    if (!ChannelDict[Contents.Trim()].Members.Contains(UserID))
                    {
                        ChannelDict[Contents.Trim()].Members.Add(UserID);
                    }
                    if (!UserDict[UserID].Channels.Contains(Contents.Trim()))
                    {
                        UserDict[UserID].Channels.Add(Contents.Trim());
                    }

                    return(ChannelDict[Contents.Trim()].Messages);
                }
                else
                {
                    return("Channel Does Not Exist");
                }

            case "LVCH":
                Console.WriteLine("Leave Channel");
                if (!ChannelDict.ContainsKey(Contents.Trim()))
                {
                    return("Channel Does Not Exist");
                }
                if (UserDict[UserID].Channels.Contains(Contents.Trim()))
                {
                    UserDict[UserID].Channels.Remove(Contents.Trim());
                }
                if (ChannelDict[Contents.Trim()].Members.Contains(UserID))
                {
                    ChannelDict[Contents.Trim()].Members.Remove(UserID);
                }
                return("User is no longer in channel " + Contents.Trim());

            case "CHCH":
                Console.WriteLine("Channel History");
                if (ChannelDict.ContainsKey(Contents.Trim()))
                {
                    if (ChannelDict[Contents.Trim()].Members.Contains(UserID))
                    {
                        return(ChannelDict[Contents.Trim()].Messages);
                    }
                    else
                    {
                        return("User is not a member of this channel");
                    }
                }
                else
                {
                    return("Channel Does not exist");
                }

            case "MEMB":
                Console.WriteLine("Member List");
                if (ChannelDict.ContainsKey(Contents.Trim()))
                {
                    if (ChannelDict[Contents.Trim()].Members.Contains(UserID))
                    {
                        string members = "";
                        foreach (int UserInt in ChannelDict[Contents.Trim()].Members)
                        {
                            members = members + UserDict[UserInt].Alias + ", ";
                        }
                        members.Trim();
                        members.Trim(',');
                        return(members);
                    }
                    else
                    {
                        return("User is not a member of this channel");
                    }
                }
                else
                {
                    return("Channel Does not exist");
                }

            case "PING":
                Console.WriteLine("Ping");
                return("Hello Client!");

            case "MECH":
                Console.WriteLine("Message Channel");
                String ChatMessage;
                String ChannelName;
                ChannelName = Contents.Substring(0, Contents.IndexOf(','));
                ChatMessage = Contents.Substring(Contents.IndexOf(',') + 1);
                if (!ChannelDict.ContainsKey(ChannelName))
                {
                    return("Channel dosen't exist");
                }
                ChannelDict[ChannelName].Messages = ChannelDict[ChannelName].Messages + UserDict[UserID].Alias + ": " + ChatMessage + "\n";
                return(ChannelDict[ChannelName.Trim()].Messages);

            case "GBYE":
                Console.WriteLine("Disconnect");
                foreach (ChannelData Channel in ChannelDict.Values)
                {
                    if (Channel.Members.Contains(UserID))
                    {
                        Channel.Members.Remove(UserID);
                    }
                }
                UserDict.Remove(UserID);
                return("Bye!");

            default:
                Console.WriteLine("No Command");
                return("Message Type not Recognised");
            }
            return("");
        }