示例#1
0
 public Response Login(string ecCode, string userId, string userPw, string sIp, int moduleId, int workId, string Ip, out IRemotingServer remotingObj)
 {
     remotingObj = null;
     Response response = this.ExecLogin(ecCode, userId, userPw, sIp, moduleId, workId, out remotingObj, true);
     CallContext.SetData("ClientIp", Ip);
     return response;
 }
        /// <summary>
        /// Initializes the channel.
        /// </summary>
        /// <param name="server">CoreRemoting sever</param>
        public void Init(IRemotingServer server)
        {
            _server = server ?? throw new ArgumentNullException(nameof(server));

            _webSocketServer = new WebSocketServer(_server.Config.NetworkPort, secure: false);

            _webSocketServer.AddWebSocketService(
                path: "/rpc",
                initializer: () => new RpcWebsocketSharpBehavior(_server));
        }
示例#3
0
        public void Connect(object credentials)
        {
            object          token;
            IRemotingServer server = (IRemotingServer)Activator.GetObject(typeof(IRemotingServer), _serviceUrl.ToString());

            _connection       = server.NewClient(credentials, out token);
            _token            = token;
            _serverConnection = new RemotingMBeanServerConnection(_connection, _token);
            _fetcher          = new NotificationFetcher(_fetcherConfig, _connection, _serverConnection);
        }
示例#4
0
        private bool GetExistRemotingServerObject(int workId, out IRemotingServer serverObj)
        {
            bool flag = true;
            OnlineUserManager manager = new OnlineUserManager();

            serverObj = (RemotingServer)manager.GetExistRemotingServer(workId);
            if (serverObj == null)
            {
                manager.Remove(workId);
                flag = false;
            }
            return(flag);
        }
示例#5
0
 public Response Login(string ecCode, string userId, string userPw, string sIp, int moduleId, int workId, string Ip, string Port, out IRemotingServer remotingObj)
 {
     remotingObj = null;
     string data = Ip + ":" + Port;
     bool flag = true;
     if (!string.IsNullOrEmpty(Const.IsNeedPWDUpdate) && "0".Equals(Const.IsNeedPWDUpdate))
     {
         flag = false;
     }
     Response response = this.ExecLogin(ecCode, userId, userPw, sIp, moduleId, workId, out remotingObj, !flag);
     CallContext.SetData("ClientIp", data);
     return response;
 }
示例#6
0
        private RemotingConnector(SerializationInfo info, StreamingContext context)
        {
            string connectionId = info.GetString("connectionId");

            _serviceUrl = new Uri(info.GetString("serviceUrl"));
            string typeString = info.GetString("tokenType");

            if (typeString != null)
            {
                Type tokenType = Type.GetType(typeString, true);
                _token = info.GetValue("token", tokenType);
            }
            _fetcherConfig = (NotificationFetcherConfig)info.GetValue("fetcherConfig", typeof(NotificationFetcherConfig));
            if (connectionId != null)
            {
                IRemotingServer server = (IRemotingServer)Activator.GetObject(typeof(IRemotingServer), _serviceUrl.ToString());
                _connection       = server.Reconnect(connectionId);
                _serverConnection = new RemotingMBeanServerConnection(_connection, _token);
                _fetcher          = new NotificationFetcher(_fetcherConfig, _connection, _serverConnection);
            }
        }
示例#7
0
        /// <summary>
        /// Creates a new session.
        /// </summary>
        /// <param name="clientPublicKey">Client's public key</param>
        /// <param name="server">Server instance</param>
        /// <param name="rawMessageTransport">Component that does the raw message transport</param>
        /// <returns>The newly created session</returns>
        public RemotingSession CreateSession(byte[] clientPublicKey, IRemotingServer server, IRawMessageTransport rawMessageTransport)
        {
            if (server == null)
            {
                throw new ArgumentException(nameof(server));
            }

            if (rawMessageTransport == null)
            {
                throw new ArgumentNullException(nameof(rawMessageTransport));
            }

            var session = new RemotingSession(
                KeySize,
                clientPublicKey,
                server,
                rawMessageTransport);

            _sessions.TryAdd(session.SessionId, session);

            return(session);
        }
示例#8
0
 public static void CutOff()
 {
     RemotingClient.app = null;
 }
示例#9
0
 public ServerHeartbeatProcessor(IRemotingServer remotingServer)
 {
     _remotingServer = remotingServer;
 }
示例#10
0
 /// <summary>
 /// Initializes the RPC service instance.
 /// </summary>
 /// <param name="server">Remoting server instance, which is hosting the service to call</param>
 public RpcWebsocketSharpBehavior(IRemotingServer server)
 {
     _server = server ?? throw new ArgumentException(nameof(server));
 }
示例#11
0
 /// <summary>
 /// Frees managed resources.
 /// </summary>
 public void Dispose()
 {
     _server = null;
 }
示例#12
0
 public Response CheckSendMsgLogin(string ecCode, string userId, string userPw, string sIp, int moduleId, int workId, string Ip, string Port, out IRemotingServer remotingObj, string verfNum, string verfCode)
 {
     throw new NotImplementedException();
 }
示例#13
0
 public Response Login(string userId, string userPw, string sIp, int moduleId, int workId, out IRemotingServer remotingObj)
 {
     return this.Login("", userId, userPw, sIp, moduleId, workId, out remotingObj);
 }
示例#14
0
        /// <summary>
        /// Creates a new instance of the RemotingSession class.
        /// </summary>
        /// <param name="keySize">Key size of the RSA keys for asymmetric encryption</param>
        /// <param name="clientPublicKey">Public key of this session's client</param>
        /// <param name="server">Server instance, that hosts this session</param>
        /// <param name="rawMessageTransport">Component, that does the raw message transport (send and receive)</param>
        internal RemotingSession(int keySize, byte[] clientPublicKey, IRemotingServer server,
                                 IRawMessageTransport rawMessageTransport)
        {
            _sessionId             = Guid.NewGuid();
            _lastActivityTimestamp = DateTime.Now;
            _isAuthenticated       = false;
            _keyPair  = new RsaKeyPair(keySize);
            CreatedOn = DateTime.Now;
            _remoteDelegateInvocationEventAggregator = new RemoteDelegateInvocationEventAggregator();
            _server = server ?? throw new ArgumentNullException(nameof(server));
            _delegateProxyFactory = _server.ServiceRegistry.GetService <IDelegateProxyFactory>();
            _delegateProxyCache   = new ConcurrentDictionary <Guid, IDelegateProxy>();
            _rawMessageTransport  = rawMessageTransport ?? throw new ArgumentNullException(nameof(rawMessageTransport));
            _clientPublicKeyBlob  = clientPublicKey;

            _rawMessageTransport.ReceiveMessage += OnReceiveMessage;
            _rawMessageTransport.ErrorOccured   += OnErrorOccured;

            MessageEncryption = clientPublicKey != null;

            WireMessage completeHandshakeMessage;

            if (MessageEncryption)
            {
                var encryptedSessionId =
                    RsaKeyExchange.EncryptSecret(
                        keySize: _server.SessionRepository.KeySize,
                        receiversPublicKeyBlob: clientPublicKey,
                        secretToEncrypt: _sessionId.ToByteArray(),
                        sendersPublicKeyBlob: _keyPair.PublicKey);

                var rawContent = _server.Serializer.Serialize(encryptedSessionId);

                var signedMessageData =
                    new SignedMessageData()
                {
                    MessageRawData = rawContent,
                    Signature      =
                        RsaSignature.CreateSignature(
                            keySize: keySize,
                            sendersPrivateKeyBlob: _keyPair.PrivateKey,
                            rawData: rawContent)
                };

                var rawData = _server.Serializer.Serialize(typeof(SignedMessageData), signedMessageData);

                completeHandshakeMessage =
                    new WireMessage
                {
                    MessageType = "complete_handshake",
                    Data        = rawData
                };
            }
            else
            {
                completeHandshakeMessage =
                    new WireMessage
                {
                    MessageType = "complete_handshake",
                    Data        = _sessionId.ToByteArray()
                };
            }

            _remoteDelegateInvocationEventAggregator.RemoteDelegateInvocationNeeded +=
                (delegateType, uniqueCallKey, handlerKey, arguments) =>
            {
                var sharedSecret =
                    MessageEncryption
                            ? _sessionId.ToByteArray()
                            : null;

                var remoteDelegateInvocationMessage =
                    new RemoteDelegateInvocationMessage
                {
                    UniqueCallKey     = uniqueCallKey,
                    HandlerKey        = handlerKey,
                    DelegateArguments = arguments
                };

                var remoteDelegateInvocationWebsocketMessage =
                    _server.MessageEncryptionManager
                    .CreateWireMessage(
                        serializedMessage: _server.Serializer.Serialize(remoteDelegateInvocationMessage),
                        serializer: _server.Serializer,
                        sharedSecret: sharedSecret,
                        keyPair: _keyPair,
                        messageType: "invoke");

                // Invoke remote delegate on client
                _rawMessageTransport.SendMessage(
                    _server.Serializer.Serialize(remoteDelegateInvocationWebsocketMessage));

                return(null);
            };

            _rawMessageTransport.SendMessage(_server.Serializer.Serialize(completeHandshakeMessage));
        }
示例#15
0
 private bool GetExistRemotingServerObject(int workId, out IRemotingServer serverObj)
 {
     bool flag = true;
     OnlineUserManager manager = new OnlineUserManager();
     serverObj = (RemotingServer) manager.GetExistRemotingServer(workId);
     if (serverObj == null)
     {
         manager.Remove(workId);
         flag = false;
     }
     return flag;
 }
示例#16
0
 public Response Login(string userId, string userPw, string sIp, int moduleId, int workId, out IRemotingServer remotingObj)
 {
     return(this.Login("", userId, userPw, sIp, moduleId, workId, out remotingObj));
 }
示例#17
0
        public Response Login(string ecCode, string userId, string userPw, string sIp, int moduleId, int workId, string Ip, out IRemotingServer remotingObj)
        {
            remotingObj = null;
            Response response = this.ExecLogin(ecCode, userId, userPw, sIp, moduleId, workId, out remotingObj, true);

            CallContext.SetData("ClientIp", Ip);
            return(response);
        }
示例#18
0
        private Response ExecLogin(string ecCode, string userId, string userPw, string clientIp, int moduleId, int workId, out IRemotingServer remotingServerObject, bool isOldInterfaceFlag)
        {
            remotingServerObject = null;
            Response response = new Response();
            string   format   = "{0}|{1}|{2}";

            try
            {
                new LogHelper().WriteLog(new LogMsg("RemotingLogin", "ExecLogin", userId + "," + userPw + "," + clientIp));
                string errorMessage = string.Empty;
                if (!this.CheckOnline(ref errorMessage))
                {
                    ErrorMsg msg = new ErrorMsg("RemotingLogin", "ExecLogin", errorMessage);
                    new LogHelper().WriteError(msg);
                    response.ErrorMsg = errorMessage;
                    return(response);
                }
                if (!this.ADCCheck(workId, ecCode, userId, userPw, ref errorMessage))
                {
                    ErrorMsg msg2 = new ErrorMsg("RemotingLogin", "ExecLogin", errorMessage);
                    new LogHelper().WriteError(msg2);
                    response.ErrorMsg = errorMessage;
                    return(response);
                }
                if (((workId == -1) || !this.GetExistRemotingServerObject(workId, out remotingServerObject)) || !this.IsDbExistUser(workId))
                {
                    new LogHelper().WriteLog(new LogMsg("RemotingLogin", "ExecLogin", "开始新的重登," + workId.ToString()));
                    moduleId = this.ChangeModuleIdFromConfiger(moduleId);
                    UserInfoEntity userInfoEntity = new UserInfoEntity();
                    if (!this.GetNewUser(userId, userPw, clientIp, moduleId, OnlineUserManager.MaxWorkId + 1, isOldInterfaceFlag, ref userInfoEntity, out errorMessage))
                    {
                        ErrorMsg msg3 = new ErrorMsg("RemotingLogin", "ExecLogin", errorMessage);
                        new LogHelper().WriteError(msg3);
                        response.ErrorMsg = errorMessage;
                        return(response);
                    }
                    response.ErrorMsg    = errorMessage;
                    remotingServerObject = this.CreateRemotingServer(userInfoEntity, userId, moduleId);
                    response.ResultCode  = 0L;
                    response.SvcContext  = string.Format(format, userInfoEntity.WorkId, userInfoEntity.UserName, SecurityHelper.Key);
                    CarDataInfoBuffer.UpdateLoginUserCarInfo(userId);
                    new LogHelper().WriteLog(new LogMsg("RemotingLogin", "ExecLogin", "结束新的重登," + userInfoEntity.WorkId.ToString()));
                    return(response);
                }
                new LogHelper().WriteLog(new LogMsg("RemotingLogin", "ExecLogin", "开始原有还存在对象登入," + workId.ToString()));
                response.ResultCode = 0L;
                string userName = this.GetUserName(userId);
                response.SvcContext = string.Format(format, workId.ToString(), userName, SecurityHelper.Key);
                new LogHelper().WriteLog(new LogMsg("RemotingLogin", "ExecLogin", "结束原有还存在对象登入," + workId.ToString()));
            }
            catch (Exception exception)
            {
                ErrorMsg msg4 = new ErrorMsg("RemotingLogin", "ExecLogin", exception.Message + exception.StackTrace);
                new LogHelper().WriteError(msg4);
                response.ErrorMsg = exception.Message;
            }
            return(response);
        }
示例#19
0
 public Response SendMsgLogin(string ecCode, string userId, string userPw, string sIp, int moduleId, int workId, string Ip, string Port, out IRemotingServer remotingObj)
 {
     throw new NotImplementedException();
 }
示例#20
0
        public Response Login(string ecCode, string userId, string userPw, string sIp, int moduleId, int workId, string Ip, string Port, out IRemotingServer remotingObj)
        {
            remotingObj = null;
            string data = Ip + ":" + Port;
            bool   flag = true;

            if (!string.IsNullOrEmpty(Const.IsNeedPWDUpdate) && "0".Equals(Const.IsNeedPWDUpdate))
            {
                flag = false;
            }
            Response response = this.ExecLogin(ecCode, userId, userPw, sIp, moduleId, workId, out remotingObj, !flag);

            CallContext.SetData("ClientIp", data);
            return(response);
        }
示例#21
0
 public RegTmProcessor(IRemotingServer remotingServer)
 {
     this.remotingServer   = remotingServer;
     this.checkAuthHandler = EnhancedServiceLoader.Load <IRegisterCheckAuthHandler>();
 }
示例#22
0
 private Response ExecLogin(string ecCode, string userId, string userPw, string clientIp, int moduleId, int workId, out IRemotingServer remotingServerObject, bool isOldInterfaceFlag)
 {
     remotingServerObject = null;
     Response response = new Response();
     string format = "{0}|{1}|{2}";
     try
     {
         new LogHelper().WriteLog(new LogMsg("RemotingLogin", "ExecLogin", userId + "," + userPw + "," + clientIp));
         string errorMessage = string.Empty;
         if (!this.CheckOnline(ref errorMessage))
         {
             ErrorMsg msg = new ErrorMsg("RemotingLogin", "ExecLogin", errorMessage);
             new LogHelper().WriteError(msg);
             response.ErrorMsg = errorMessage;
             return response;
         }
         if (!this.ADCCheck(workId, ecCode, userId, userPw, ref errorMessage))
         {
             ErrorMsg msg2 = new ErrorMsg("RemotingLogin", "ExecLogin", errorMessage);
             new LogHelper().WriteError(msg2);
             response.ErrorMsg = errorMessage;
             return response;
         }
         if (((workId == -1) || !this.GetExistRemotingServerObject(workId, out remotingServerObject)) || !this.IsDbExistUser(workId))
         {
             new LogHelper().WriteLog(new LogMsg("RemotingLogin", "ExecLogin", "开始新的重登," + workId.ToString()));
             moduleId = this.ChangeModuleIdFromConfiger(moduleId);
             UserInfoEntity userInfoEntity = new UserInfoEntity();
             if (!this.GetNewUser(userId, userPw, clientIp, moduleId, OnlineUserManager.MaxWorkId + 1, isOldInterfaceFlag, ref userInfoEntity, out errorMessage))
             {
                 ErrorMsg msg3 = new ErrorMsg("RemotingLogin", "ExecLogin", errorMessage);
                 new LogHelper().WriteError(msg3);
                 response.ErrorMsg = errorMessage;
                 return response;
             }
             response.ErrorMsg = errorMessage;
             remotingServerObject = this.CreateRemotingServer(userInfoEntity, userId, moduleId);
             response.ResultCode = 0L;
             response.SvcContext = string.Format(format, userInfoEntity.WorkId, userInfoEntity.UserName, SecurityHelper.Key);
             CarDataInfoBuffer.UpdateLoginUserCarInfo(userId);
             new LogHelper().WriteLog(new LogMsg("RemotingLogin", "ExecLogin", "结束新的重登," + userInfoEntity.WorkId.ToString()));
             return response;
         }
         new LogHelper().WriteLog(new LogMsg("RemotingLogin", "ExecLogin", "开始原有还存在对象登入," + workId.ToString()));
         response.ResultCode = 0L;
         string userName = this.GetUserName(userId);
         response.SvcContext = string.Format(format, workId.ToString(), userName, SecurityHelper.Key);
         new LogHelper().WriteLog(new LogMsg("RemotingLogin", "ExecLogin", "结束原有还存在对象登入," + workId.ToString()));
     }
     catch (Exception exception)
     {
         ErrorMsg msg4 = new ErrorMsg("RemotingLogin", "ExecLogin", exception.Message + exception.StackTrace);
         new LogHelper().WriteError(msg4);
         response.ErrorMsg = exception.Message;
     }
     return response;
 }
 /// <summary>
 /// Stops listening and frees managed resources.
 /// </summary>
 public void Dispose()
 {
     StopListening();
     _webSocketServer = null;
     _server          = null;
 }
 public ServerOnRequestProcessor(IRemotingServer remotingServer,
                                 ITransactionMessageHandler transactionMessageHandler)
 {
     _remotingServer            = remotingServer;
     _transactionMessageHandler = transactionMessageHandler;
 }