コード例 #1
0
ファイル: ChatXService.cs プロジェクト: istbarp/ChatX
        public void LeaveRoom(string username, string roomName)
        {
            IMQDriver mqDriver = GetMQDriver();

            string command      = Config.GenerateCommand(Config.CMD.LEAVE_ROOM, Thread.CurrentThread.ManagedThreadId, username, roomName);
            bool   hasResponded = false;

            mqDriver.OnResponseRecieved += (cmd) =>
            {
                string[] cmdParts = cmd.Split(':');

                string cmdType = GetCmdType(Config.CMD.LEAVE_ROOM_RESPONSE);

                if (cmdParts[0].Equals(cmdType))
                {
                    if (cmdParts[1].Equals(Thread.CurrentThread.ManagedThreadId))
                    {
                        if (!cmdParts[2].ToUpper().Equals("OK"))
                        {
                            throw new FaultException(cmd);
                        }
                        else
                        {
                            hasResponded = true;
                        }
                    }
                }
            };

            mqDriver.SendCommand(command);
            Wait(ref hasResponded);
            mqDriver.ListenerOpen = false;
        }
コード例 #2
0
ファイル: ChatXService.cs プロジェクト: istbarp/ChatX
        private void LockUsername(string username, IMQDriver mqDriver)
        {
            string command = Config.GenerateCommand(Config.CMD.VAL_USERNAME, Thread.CurrentThread.ManagedThreadId, username);

            bool usernameLocked = false;

            mqDriver.OnResponseRecieved += (cmd) =>
            {
                string   cmdType  = GetCmdType(Config.CMD.VAL_USERNAME_REPONSE);
                string[] cmdParts = cmd.Split(Config.SEPERATOR);

                if (cmdParts[0].Equals(cmdType))
                {
                    if (cmdParts[1].Equals(Thread.CurrentThread.ManagedThreadId))
                    {
                        if (cmdParts[2].ToUpper().Equals("OK"))
                        {
                            usernameLocked = true;
                        }
                        else
                        {
                            throw new FaultException(cmd);
                        }
                    }
                }
            };
            mqDriver.SendCommand(command);
            Wait(ref usernameLocked);
        }
コード例 #3
0
        private void ReleaseUsername(string username, IMQDriver mqDriver)
        {
            string command = Config.GenerateCommand(Config.CMD.RELEASE_USERNAME, Thread.CurrentThread.ManagedThreadId, username);

            mqDriver.SendCommand(command);
            //mqDriver.CloseConnections();  //TODO: close connections?
        }
コード例 #4
0
        public void JoinRoom(string username, string roomName)
        {
            IMQDriver mqDriver = GetMQDriver();

            string command      = Config.GenerateCommand(Config.CMD.JOIN_ROOM, Thread.CurrentThread.ManagedThreadId, username, roomName);
            bool   hasResponded = false;

            mqDriver.OnResponseRecieved += (cmd) => {
                string[] cmdParts = cmd.Split(Config.SEPERATOR);

                string cmdType = GetCmdType(Config.CMD.JOIN_ROOM_RESPONSE);

                if (cmdParts[0].Equals(cmdType))
                {
                    if (cmdParts[1].Equals(Thread.CurrentThread.ManagedThreadId))
                    {
                        if (!cmdParts[2].ToUpper().Equals("OK"))
                        {
                            throw new FaultException(cmd);
                        }
                        else
                        {
                            hasResponded = true;
                        }
                    }
                }
            };

            Wait(ref hasResponded);

            mqDriver.SendCommand(command);
            //mqDriver.CloseConnections();  //TODO: close connections?
        }
コード例 #5
0
ファイル: ChatXService.cs プロジェクト: istbarp/ChatX
        public void SendMessage(string username, string roomName, string encryptedMessage)
        {
            IMQDriver mqDriver = GetMQDriver();

            string command = Config.GenerateCommand(Config.CMD.SEND_MESSAGE, Thread.CurrentThread.ManagedThreadId, username, roomName, encryptedMessage);

            mqDriver.SendCommand(command);
            mqDriver.ListenerOpen = false;
        }
コード例 #6
0
        public void SendMessage(string username, string roomName, string encryptedMessage)
        {
            IMQDriver mqDriver = GetMQDriver();

            string command = Config.GenerateCommand(Config.CMD.SEND_MESSAGE, Thread.CurrentThread.ManagedThreadId, username, roomName, encryptedMessage);

            mqDriver.SendCommand(command);
            //mqDriver.CloseConnections();  //TODO: close connections?
        }
コード例 #7
0
ファイル: ChatXService.cs プロジェクト: istbarp/ChatX
        public string Login(string username)
        {
            //TODO make mqDriver into mqDriver for all servers

            IServerDestributer serverDist = new LocalServerDestributer();

            string    reqServer = serverDist.RequestServer();
            IMQDriver mqDriver  = serverDist.GetMQDriver(reqServer);

            LockUsername(username, mqDriver);

            //TODO make mqDriver into single server mqDriver
            string command = Config.GenerateCommand(Config.CMD.LOGIN_REQUEST, Thread.CurrentThread.ManagedThreadId, username, reqServer, GetClientIP());

            bool serverResponded = false;

            mqDriver.OnResponseRecieved += (cmd) =>
            {
                string   comType  = GetCmdType(Config.CMD.LOGIN_RESPONSE);
                string[] comParts = cmd.Split(':');

                if (comParts[0].Equals(comType))
                {
                    if (comParts[1].Equals(Thread.CurrentThread.ManagedThreadId))
                    {
                        if (comParts[2].ToUpper().Equals("OK"))
                        {
                            serverResponded = true;
                        }
                        else
                        {
                            throw new FaultException(cmd);
                        }
                    }
                }
            };

            Wait(ref serverResponded);

            ReleaseUsername(username, mqDriver);

            mqDriver.ListenerOpen = false;

            return(GetServerDestributor().RequestServer());
        }
コード例 #8
0
ファイル: ChatXService.cs プロジェクト: istbarp/ChatX
        public string[] GetRooms()
        {
            IMQDriver mqDriver = GetMQDriver();
            string    command  = Config.GenerateCommand(Config.CMD.REQUEST_ROOMS, Thread.CurrentThread.ManagedThreadId);

            List <string> rooms = new List <string>();
            bool          aServerHasResponded = false;

            mqDriver.OnResponseRecieved += (cmd) =>
            {
                if (!aServerHasResponded)
                {
                    string cmdType = GetCmdType(Config.CMD.REQUEST_ROOMS_RESPONSE);

                    string[] cmdParts = cmd.Split(':');

                    if (cmdParts[0].Equals(cmdType))
                    {
                        if (cmdParts[1].Equals(Thread.CurrentThread.ManagedThreadId))
                        {
                            for (int i = 2; i < cmdParts.Length; i++)
                            {
                                rooms.Add(cmdParts[i]);
                            }
                            aServerHasResponded = true;
                        }
                    }
                }
            };

            mqDriver.SendCommand(command);
            Wait(ref aServerHasResponded);
            mqDriver.ListenerOpen = false;

            return(rooms.ToArray());
        }
コード例 #9
0
ファイル: ChatXService.cs プロジェクト: istbarp/ChatX
 private void ReleaseUsername(string username, IMQDriver mqDriver)
 {
     string command = Config.GenerateCommand(Config.CMD.RELEASE_USERNAME, Thread.CurrentThread.ManagedThreadId, username);
     mqDriver.SendCommand(command);
 }
コード例 #10
0
ファイル: ChatXService.cs プロジェクト: istbarp/ChatX
        private void LockUsername(string username, IMQDriver mqDriver)
        {
            string command = Config.GenerateCommand(Config.CMD.VAL_USERNAME, Thread.CurrentThread.ManagedThreadId, username);

            bool usernameLocked = false;
            mqDriver.OnResponseRecieved += (cmd) =>
            {
                string cmdType = GetCmdType(Config.CMD.VAL_USERNAME_REPONSE);
                string[] cmdParts = cmd.Split(Config.SEPERATOR);

                if (cmdParts[0].Equals(cmdType))
                {
                    if (cmdParts[1].Equals(Thread.CurrentThread.ManagedThreadId))
                    {
                        if (cmdParts[2].ToUpper().Equals("OK"))
                        {
                            usernameLocked = true;
                        }
                        else
                        {
                            throw new FaultException(cmd);
                        }
                    }
                }
            };
            mqDriver.SendCommand(command);
            Wait(ref usernameLocked);
        }