예제 #1
0
        private void Process(object arg)
        {
            MemoryStream stream;
            Socket       client = (Socket)arg;

            try {
                byte[] buffer = new byte[bufferSize];
                while (true)
                {
                    stream = new MemoryStream();
                    int totalBytes = 0;
                    Console.Write("took ");
                    do
                    {
                        short bytes = (short)client.Receive(buffer);
                        stream.Write(buffer, 0, bytes);
                        Console.Write(bytes + ", ");
                        totalBytes += bytes;
                    }while (client.Available > 0);
                    Console.WriteLine();
                    Console.WriteLine("Сообщение получено от " + client.RemoteEndPoint.ToString() + "в размере " + totalBytes);
                    dbRequest request = (dbRequest)DbObject.Deserialize(stream);
                    stream.Close();
                    dbResult result = ProcessDbObject(request);
                    SendDbResult(client, result);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                Console.WriteLine("Разъединение " + client.RemoteEndPoint.ToString());
                client.Shutdown(SocketShutdown.Both);
                client.Close();
            }
        }
예제 #2
0
        private dbResult ProcessDbObject(dbRequest request)
        {
            dbResult result = new dbResult(request.action, request.selectAction, false);

            try
            {
                switch (request.selectAction)
                {
                case dbSelectAction.SELECT_ROLES:
                    result.objects = dbHandle.GetRoles();
                    break;

                case dbSelectAction.SELECT_CHAT_TYPES:
                    result.objects = dbHandle.GetChatTypes();
                    break;

                case dbSelectAction.SELECT_ALL_USERS:
                    result.objects = dbHandle.getAllUsers(request.currentUser);
                    break;
                }
                switch (request.action)
                {
                case dbAction.ADD_USER:
                    User newUser = (User)request.entity;
                    if (dbHandle.addUser(request.currentUser, newUser))
                    {
                        result.objects = new Entity[] { newUser };
                    }
                    break;

                case dbAction.VERIFY_USER:
                    User user = (User)request.entity;
                    user                = dbHandle.fillUserInfo(user.login, user.password);
                    result.objects      = new Entity[] { user };
                    result.isSuccessful = true;
                    break;
                }
                result.isSuccessful = true;
                Console.WriteLine("Отправлен результат " + result.ToString());
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                result.message = e.Message;
                result.objects = null;
            }
            finally
            {
            }
            return(result);
        }
예제 #3
0
        public void sendRequest(dbRequest request)
        {
            byte[]       bytes      = DbObject.Serialize(request);
            MemoryStream stream     = new MemoryStream(bytes);
            int          totalBytes = 0;

            Console.WriteLine("need to send " + bytes.Length + " bytes");
            while (stream.Position < stream.Length)
            {
                byte[] buffer    = new byte[socket.ReceiveBufferSize];
                int    byteCount = stream.Read(buffer, 0, socket.ReceiveBufferSize);
                totalBytes += byteCount;
                this.socket.Send(buffer, byteCount, SocketFlags.None);
            }
            Console.WriteLine("sent " + totalBytes + " bytes");
            stream.Close();
        }
예제 #4
0
        public void requestRoles()
        {
            dbRequest request = new dbRequest(dbAction.NONE, dbSelectAction.SELECT_ROLES, null, null);

            sendRequest(request);
        }
예제 #5
0
        public void signUpUser(User newUser)
        {
            dbRequest request = new dbRequest(dbAction.ADD_USER, dbSelectAction.NONE, currentUser, newUser);

            sendRequest(request);
        }
예제 #6
0
        public void getAllUsers()
        {
            dbRequest request = new dbRequest(dbAction.NONE, dbSelectAction.SELECT_ALL_USERS, currentUser, null);

            sendRequest(request);
        }
예제 #7
0
        public void setCurrentUser(User newUser)
        {
            dbRequest request = new dbRequest(dbAction.VERIFY_USER, dbSelectAction.NONE, null, newUser);

            sendRequest(request);
        }