コード例 #1
0
        private void OnReceive(IAsyncResult ar)
        {
            Client client = (Client)ar.AsyncState;

            //из массива байт в Data объект
            Received = new Data(byteData);
            try
            {
                switch (Received.cmdCommand)
                {
                case Command.Login:
                    dataContext.SetContext(clientLogin);
                    break;

                case Command.Registration:
                    dataContext.SetContext(clientRegistration);
                    break;

                case Command.SendActivationCode:
                    dataContext.SetContext(clientReSendActivCode);
                    break;

                case Command.Logout:
                    dataContext.SetContext(clientLogout);
                    break;

                case Command.Message:
                    dataContext.SetContext(clientMessage);
                    break;

                case Command.privMessage:
                    dataContext.SetContext(clientPrivateMessage);
                    break;

                case Command.List:
                    dataContext.SetContext(clientListManager);
                    break;

                case Command.manageFriend:
                    dataContext.SetContext(manageClientFriend);
                    break;

                default:
                    throw new ArgumentException("Wrong Package command from client");
                }
                dataContext.Load(client, Received, ListOfClientsOnline, ChannelsList);
                dataContext.Execute();
                dataContext.Response();

                ReceivedMessage(client, Received, byteData);
            }
            catch (Exception ex)
            {
                clientLogout.Send.cmdCommand = Command.Logout;
                clientLogout.Send.strName    = Client.strName;
                clientLogout.Load(client, Received, ListOfClientsOnline, ChannelsList);
                clientLogout.Execute();
                string exMessage = "client: " + client.strName + " " + ex.Message;
                Console.WriteLine(exMessage);
                servLogger.Log(exMessage);

                clientLogout.Response();
            }
        }
コード例 #2
0
        private void OnReceive(IAsyncResult ar)
        {
            // Retrieve the client and the handler socket
            // from the asynchronous client.
            Client client = (Client)ar.AsyncState;

            //Transform the array of bytes received from the user into an
            //intelligent form of object Data
            Received = new Data(byteData);
            try
            {
                switch (Received.cmdCommand)
                {
                case Command.Login:
                    dataContext.SetContext(clientLogin);
                    break;

                case Command.Registration:
                    dataContext.SetContext(clientRegistration);
                    break;

                case Command.changePassword:
                    dataContext.SetContext(clientChangePassword);
                    break;

                case Command.lostPassword:
                    dataContext.SetContext(clientLostPassword);
                    break;

                case Command.SendActivationCode:
                    dataContext.SetContext(clientReSendActivCode);
                    break;

                case Command.Logout:
                    dataContext.SetContext(clientLogout);
                    break;

                case Command.Message:
                    dataContext.SetContext(clientMessage);
                    break;

                case Command.privMessage:
                    dataContext.SetContext(clientPrivateMessage);
                    break;

                case Command.createChannel:
                    dataContext.SetContext(clientCreateChannel);
                    break;

                case Command.joinChannel:
                    dataContext.SetContext(clientJoinChannel);
                    break;

                case Command.exitChannel:
                    dataContext.SetContext(clientExitChannel);
                    break;

                case Command.editChannel:
                    // TODO ALL
                    break;

                case Command.deleteChannel:
                    dataContext.SetContext(clientDeleteChannel);
                    break;

                case Command.enterChannel:
                    dataContext.SetContext(clientEnterChannel);
                    break;

                case Command.leaveChannel:
                    dataContext.SetContext(clientLeaveChannel);
                    break;

                case Command.List:
                    dataContext.SetContext(clientListManager);
                    break;

                case Command.manageFriend:
                    dataContext.SetContext(manageClientFriend);
                    break;

                case Command.ignoreUser:
                    dataContext.SetContext(clientIgnoreUser);
                    break;

                case Command.kick:
                    dataContext.SetContext(clientKick);
                    break;

                case Command.ban:
                    dataContext.SetContext(clientBan);
                    break;

                case Command.kickUserChannel:
                    dataContext.SetContext(clientKickFromChannel);
                    break;

                case Command.banUserChannel:
                    dataContext.SetContext(clientBanFromChannel);
                    break;

                case Command.sendFile:
                    if (Received.strFileMsg != null)
                    {
                        dataContext.SetContext(clientSendFile);
                    }
                    else
                    {
                        dataContext.SetContext(clientSendFileInfo);
                    }
                    break;

                default:
                    throw new ArgumentException("Wrong Package command from client");
                }
                dataContext.Load(client, Received, ListOfClientsOnline, ChannelsList);
                dataContext.Execute();
                dataContext.Response();

                ReceivedMessage(client, Received, byteData);
            }
            catch (Exception ex)
            {
                // So we make sure that client which got crash or internet close, server will send log out message
                clientLogout.Send.cmdCommand = Command.Logout;
                clientLogout.Send.strName    = Client.strName;
                clientLogout.Load(client, Received, ListOfClientsOnline, ChannelsList);
                clientLogout.Execute();
                string exMessage = ("client: " + client.strName + " " + ex.Message);
                Console.WriteLine(exMessage);
                //Console.WriteLine(ex.StackTrace);
                servLogger.Log(exMessage);

                clientLogout.Response();
            }
        }