Ejemplo n.º 1
0
        public static bool connect(String host, String callSign, int port)
        {
            ports = new int[] { 4444, 4445, 4567, 6969, 32000 };
            if (dataLocker == null)
            {
                dataLocker = new object();
            }
            if (chatLocker == null)
            {
                chatLocker = new object();
            }
            if (chatMessages == null)
            {
                chatMessages = new List <String>();
            }
            if (members == null)
            {
                members = new List <ChatRoomMember>();
            }
            chatPointer         = 0;
            chatSound           = DSound.LoadSound(DSound.SoundPath + "\\chat1.wav");
            chatEnterSound      = DSound.LoadSound(DSound.SoundPath + "\\chat2.wav");
            chatLeaveSound      = DSound.LoadSound(DSound.SoundPath + "\\chat3.wav");
            privateMessageSound = DSound.LoadSound(DSound.SoundPath + "\\chat4.wav");
            serverMessageSound  = DSound.LoadSound(DSound.SoundPath + "\\chat5.wav");
            senders             = new Dictionary <string, ClientRecord>();
            waitingForResponse  = new AutoResetEvent(false);
            isConnected         = false; error = false;
            live   = false;
            client = new TcpClient();
            int i    = (port != 0) ? Array.IndexOf(ports, port) : 0;
            int time = 0;

            while (i < ports.Length)
            {
                error = false;
                time  = 0;
                client.BeginConnect(host, port = ports[i++],
                                    new AsyncCallback(connectedEvent), null);
                while (!isConnected && !error)
                {
                    Application.DoEvents();
                    if (time >= 3000)
                    {
                        endConnect();                         //stop trying to connect on this port
                        break;
                    }
                    time += 100;
                    Thread.Sleep(100);
                }
                if (isConnected)
                {
                    break;
                }
            }             //search ports
            if (!isConnected || error)
            {
                return(false);
            }
            Options.writeToFile();
            try
            {
                using (BinaryWriter writer = new BinaryWriter(new MemoryStream()))
                {
                    writer.Write(callSign);
                    writer.Flush();
                    CSCommon.sendData(client, writer);
                }                 //using
                LoginMessages resp = LoginMessages.none;
                using (BinaryReader reader = new BinaryReader(CSCommon.getData(client, 5000)))
                {
                    resp       = (LoginMessages)reader.ReadInt32();
                    m_messages = resp;
                    if ((resp & LoginMessages.serverAssignedTag) == LoginMessages.serverAssignedTag)
                    {
                        serverTag = reader.ReadString();
                        String messageOfTheDay = reader.ReadString();
                        if ((resp & LoginMessages.messageOfTheDay) == LoginMessages.messageOfTheDay)
                        {
                            // We now need to speak the message and then show an input box for the user to
                            // press ENTER to continue. This is because some screen readers
                            // Don't have a way to stop the running thread.
                            SapiSpeech.speak("[Welcome message]: " + messageOfTheDay + " (press ENTER to continue)", SapiSpeech.SpeakFlag.interruptable);
                            Common.mainGUI.receiveInput().Trim();
                        }
                        System.Diagnostics.Trace.WriteLine("Server sent tag: " + serverTag);
                    }
                }                 //using
                if ((resp & LoginMessages.demo) == LoginMessages.demo)
                {
                    BPCSharedComponent.ExtendedAudio.DSound.playAndWait(BPCSharedComponent.ExtendedAudio.DSound.NSoundPath + "\\cd" + Common.getRandom(1, 2) + ".wav");
                }
                if ((resp & LoginMessages.noCallSign) == LoginMessages.noCallSign)
                {
                    BPCSharedComponent.ExtendedAudio.DSound.playAndWait(BPCSharedComponent.ExtendedAudio.DSound.NSoundPath + "\\ncs.wav");
                }
                if ((resp & LoginMessages.badVersion) == LoginMessages.badVersion)
                {
                    SapiSpeech.speak("There is a newer version of TDV available. Please update before logging on.", SapiSpeech.SpeakFlag.noInterrupt);
                    return(false);
                }
                if ((resp & LoginMessages.wrongCredentials) == LoginMessages.wrongCredentials)
                {
                    BPCSharedComponent.ExtendedAudio.DSound.playAndWait(BPCSharedComponent.ExtendedAudio.DSound.NSoundPath + "\\pw2.wav");
                    return(false);
                }
            }
            catch (IOException)
            {
                error = true;
            }
            catch (TimeoutException)
            {
                error = true;
            }
            if (error)
            {
                return(false);
            }

            if (log)
            {
                theFile = new StreamWriter(Addendums.File.appPath + "\\server_output.log");
            }
            live          = true;
            processThread = new Thread(processRCV);
            processThread.Start();
            return(true);
        }
Ejemplo n.º 2
0
        public static bool connect(String host, String password, int port, String tag)
        {
            System.Diagnostics.Trace.WriteLine("Server tag is " + tag);
            //	  ports = new int[]{4444, 4445, 4567, 6969, 32000 };
            ports = new int[] { 31111 };
            if (dataLocker == null)
            {
                dataLocker = new object();
            }
            if (chatLocker == null)
            {
                chatLocker = new object();
            }
            if (chatMessages == null)
            {
                chatMessages = new List <String>();
            }
            if (members == null)
            {
                members = new List <ChatRoomMember>();
            }
            chatPointer         = 0;
            chatSound           = DSound.LoadSound(DSound.SoundPath + "\\chat1.wav");
            chatEnterSound      = DSound.LoadSound(DSound.SoundPath + "\\chat2.wav");
            chatLeaveSound      = DSound.LoadSound(DSound.SoundPath + "\\chat3.wav");
            privateMessageSound = DSound.LoadSound(DSound.SoundPath + "\\chat4.wav");
            serverMessageSound  = DSound.LoadSound(DSound.SoundPath + "\\chat5.wav");
            senders             = new Dictionary <string, ClientRecord>();
            waitingForResponse  = new AutoResetEvent(false);
            isConnected         = false; error = false;
            live      = false;
            client    = new TcpClient();
            serverTag = tag;
            int i    = (port != 0) ? Array.IndexOf(ports, port) : 0;
            int time = 0;

            while (i < ports.Length)
            {
                error = false;
                time  = 0;
                client.BeginConnect(host, port = ports[i++],
                                    new AsyncCallback(connectedEvent), null);
                while (!isConnected && !error)
                {
                    Application.DoEvents();
                    if (time >= 3000)
                    {
                        endConnect();                         //stop trying to connect on this port
                        break;
                    }
                    time += 100;
                    Thread.Sleep(100);
                }
                if (isConnected)
                {
                    break;
                }
            }             //search ports
            if (!isConnected || error)
            {
                return(false);
            }
            Options.writeToFile();
            try
            {
                SslStream ssl = null;
                using (BinaryWriter writer = new BinaryWriter(new MemoryStream()))
                {
                    writer.Write((int)0);
                    System.Diagnostics.Trace.WriteLine("After int: " + writer.BaseStream.Length);
                    writer.Write(Convert.ToSingle(Common.applicationVersion));
                    writer.Write(tag);
                    System.Diagnostics.Trace.WriteLine("Tag is now " + tag);
                    if (password != null)
                    {
                        writer.Write(password);
                    }
                    writer.Flush();
                    System.Diagnostics.Trace.WriteLine("After password: "******"bpcprograms.com");
                    writer.BaseStream.Position = 0;
                    writer.Write((int)(writer.BaseStream.Length - 4));
                    writer.Flush();

                    System.Diagnostics.Trace.WriteLine("After data size print " + writer.BaseStream.Length);
                    System.Diagnostics.Trace.WriteLine("SSL packet size: " + (writer.BaseStream.Length - 4));
                    writer.BaseStream.Position = 0;
                    ((MemoryStream)writer.BaseStream).WriteTo(ssl);
                }                 //using
                LoginMessages resp = LoginMessages.none;
                using (BinaryReader reader = new BinaryReader(CSCommon.getData(client, 5000)))
                {
                    resp       = (LoginMessages)reader.ReadInt32();
                    m_messages = resp;
                    if ((resp & LoginMessages.serverAssignedTag) == LoginMessages.serverAssignedTag)
                    {
                        serverTag = reader.ReadString();
                        System.Diagnostics.Trace.WriteLine("Server sent tag: " + serverTag);
                    }
                }                 //using
                if ((resp & LoginMessages.demo) == LoginMessages.demo)
                {
                    BPCSharedComponent.ExtendedAudio.DSound.playAndWait(BPCSharedComponent.ExtendedAudio.DSound.NSoundPath + "\\cd" + Common.getRandom(1, 2) + ".wav");
                }
                if ((resp & LoginMessages.noCallSign) == LoginMessages.noCallSign)
                {
                    BPCSharedComponent.ExtendedAudio.DSound.playAndWait(BPCSharedComponent.ExtendedAudio.DSound.NSoundPath + "\\ncs.wav");
                }
                if ((resp & LoginMessages.badVersion) == LoginMessages.badVersion)
                {
                    SapiSpeech.speak("There is a newer version of TDV available. Please update before logging on.", SapiSpeech.SpeakFlag.noInterrupt);
                    return(false);
                }
                if ((resp & LoginMessages.wrongCredentials) == LoginMessages.wrongCredentials)
                {
                    BPCSharedComponent.ExtendedAudio.DSound.playAndWait(BPCSharedComponent.ExtendedAudio.DSound.NSoundPath + "\\pw2.wav");
                    return(false);
                }
            }
            catch (IOException)
            {
                error = true;
            }
            catch (TimeoutException)
            {
                error = true;
            }
            if (error)
            {
                return(false);
            }

            if (log)
            {
                theFile = new StreamWriter(Addendums.File.appPath + "\\server_output.log");
            }
            live          = true;
            processThread = new Thread(processRCV);
            processThread.Start();
            return(true);
        }