Exemplo n.º 1
0
        static void socketServer_NewSessionConnected(WebSocketSession session)
        {
            string name = "null", data = string.Empty;
            int    ifor = 0;

            int.TryParse(session.Host[0].ToString(), out ifor);
            msgFor mfor = (msgFor)ifor;

            switch (mfor)
            {
            case msgFor.API:
            case msgFor.EVENT:
                data = session.Origin;
                session.Close();
                db.process_MSG(mfor, data);
                break;

            default:
                m_Sessions.Add(session);
                name = session.Cookies["name"] == null?Guid.NewGuid().ToString().Substring(0, 8) : session.Cookies["name"];

                //SendToAll(name + ": " + e);
                SendToAll("System: " + name + " connected");
                break;
            }
        }
        private void CloseConnection()
        {
            _connectionState = ConnectionState.Disconnected;

            OnDisconnect?.Invoke(_webSocketSession);
            _webSocketSession.Close();
        }
        protected void WebSocketServer_NewMessageReceived(WebSocketSession session, string e)
        {
            try
            {
                var data = JsonConvert.DeserializeObject <UniversalFileToPrinter.Models.FilePrintRequest>(e);

                if (!FilePrintHelper.Checklisence())
                {
                    session.Close();
                    return;
                }

                switch (data.action)
                {
                case "HandShake":
                    session.Send(JsonConvert.SerializeObject(data));
                    break;

                case "Print":
                    if (!string.IsNullOrEmpty(data.dataSTR))
                    {
                        data.dataBin = Convert.FromBase64String(data.dataSTR);
                    }
                    _printHelper.Print(data.type, data.extension, data.printer, data.fileUrl, data.dataBin, data.info, session);
                    break;

                case "ListPrinters":
                    session.Send(JsonConvert.SerializeObject(new
                    {
                        list    = _printHelper.ListPrinters(),
                        isError = false,
                        action  = "ListPrinters"
                    }));
                    break;

                case "Stop":
                    session.Close();
                    _printHelper.StopAndClose();
                    break;
                }
            }
            catch (Exception ex)
            {
                Logger.Error("WebSocketServer_NewMessageReceived", ex);
            }
        }
Exemplo n.º 4
0
        static void appServer_SessionClosed(WebSocketSession session, CloseReason closeRs)
        {
            session.Close();
            Console.WriteLine("客户端" + session.RemoteEndPoint.Port + "断开了连接!");
            ClientNum -= 1;

            Console.WriteLine("客户端数目" + ClientNum.ToString());
        }
Exemplo n.º 5
0
        /// <summary>
        /// Sends xml data coded in Unicode to session
        /// and closes it
        /// </summary>
        private static void Send_Xml(WebSocketSession session, XElement body)
        {
            Log.WriteLine("Send_Xml " + session + ". body: " + body, typeof(AccountsServerSend));

            var bytes = Encoding.Unicode.GetBytes(body.ToString());

            session.Send(bytes, 0, bytes.Length);
            session.Close();
        }
Exemplo n.º 6
0
        /// <summary>
        /// Called when a WebSocket session is connected.
        /// </summary>
        /// <param name="session">The session.</param>
        private void OnNewSessionConnected(WebSocketSession session)
        {
            Logger.Info($"Handling WebSocket request from {session.RemoteEndPoint}.");

            var ws = new EtpServerWebSocket {
                WebSocketSession = session
            };

            _webSockets[session.SessionID] = ws;

            var headers = new Dictionary <string, string>();

            foreach (var item in session.Items)
            {
                headers[item.Key.ToString()] = item.Value.ToString();
            }

            var version  = EtpWebSocketValidation.GetEtpVersion(session.SubProtocol.Name);
            var encoding = EtpWebSocketValidation.GetEtpEncoding(headers);

            if (!Details.IsVersionSupported(version))
            {
                Logger.Debug($"Sub protocol not supported: {session.SubProtocol.Name}");
                session.Close(CloseReason.ApplicationError);
                return;
            }
            if (encoding == null)
            {
                Logger.Debug($"Error getting ETP encoding.");
                session.Close(CloseReason.ApplicationError);
                return;
            }
            if (!Details.IsEncodingSupported(encoding.Value))
            {
                Logger.Debug($"Encoding not supported: {encoding.Value}");
                session.Close(CloseReason.ApplicationError);
                return;
            }

            var server = ServerManager.CreateServer(ws, version, encoding.Value, headers);

            server.Start();
        }
Exemplo n.º 7
0
 public MultiServerClient(MasterHandler handler, ClientInfo info, WebSocketSession session)
 {
     this.handler = handler;
     this.info    = info;
     this.session = session;
     timeoutTimer = new Timer(x =>
     {
         if (status == ClientWorkerStatus.Connecting)
         {
             session.Close(SuperSocket.SocketBase.CloseReason.TimeOut);
         }
     }, null, 2000, Timeout.Infinite);
     keepAliveSw    = new Stopwatch();
     keepAliveTimer = new Timer(x =>
     {
         if (!session.Connected)
         {
             return;
         }
         lock (keepAliveSw)
         {
             if (!keepAliveSw.IsRunning)
             {
                 keepAliveSw.Start();
             }
             if (keepAliveSw.ElapsedMilliseconds > 5000)
             {
                 handler.Logger.Log($"Client {session.SessionID} is disconnected with idle of {keepAliveSw.ElapsedMilliseconds}");
                 keepAliveSw.Stop();
                 handler.RemoveClient(session.SessionID);
                 session.Close();
                 status = ClientWorkerStatus.None;
                 keepAliveTimer.Change(Timeout.Infinite, Timeout.Infinite);
                 return;
             }
         }
         SendPacket(new SimplePacket()
         {
             Data = new byte[0],
             Type = PacketType.Nop
         });
     }, null, 0, 1000);
 }
Exemplo n.º 8
0
        /// <summary>
        /// Releases unmanaged and - optionally - managed resources.
        /// </summary>
        /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                Close("Shutting down");
                _session?.Close();
            }

            base.Dispose(disposing);

            _session = null;
        }
Exemplo n.º 9
0
        void socketServer_NewMessageReceived(WebSocketSession session, string msg)
        {
            ////string name = session.Cookies["name"] == null ? "" : session.Cookies["name"].ToString();
            //string name = Guid.NewGuid().ToString();
            //SendToAll(name + ": " + msg);

            //Debug.WriteLine()
            switch (msg)
            {
            case "FILE_DELETE":
                fileDelete();
                session.Send("FILE_DELETE_SUCCESS");
                break;

            case "SENDING_COMPLETE":
                bool ok = saveFile(session.SessionID);
                if (ok)
                {
                    session.Send("UPLOAD_SUCCESS");
                }
                else
                {
                    session.Send("UPLOAD_FAIL");
                }
                session.Close();
                break;

            default:
                // Begin receive buffer of the files
                if (msg[0] == '{' && msg[msg.Length - 1] == '}')
                {
                    try
                    {
                        oFile fi = JsonConvert.DeserializeObject <oFile>(msg);
                        if (files.ContainsKey(session.SessionID))
                        {
                            files[session.SessionID] = fi;
                        }
                        else
                        {
                            files.TryAdd(session.SessionID, fi);
                        }

                        var stream = new MemoryStream();
                        streams.TryAdd(session.SessionID, stream);

                        session.Send("SOCKET_BUFFERING_START");
                    }
                    catch { }
                }
                break;
            }
        }
Exemplo n.º 10
0
        protected void AppServerNewSessionConnected(WebSocketSession session)
        {
            // The server will only maintain one connection. Whenever a new session is trying to connect, the previous
            // session will be closed.

            if (currentSession != null)
            {
                currentSession.SendCloseHandshakeResponse(0);
                currentSession.Close();
            }
            Console.WriteLine("Client Connected. IP " + session.RemoteEndPoint.Address.ToString() + " Port " + session.RemoteEndPoint.Port.ToString());
            FileLogger.Instance.LogMessage("Client Connected. IP " + session.RemoteEndPoint.Address.ToString() + " Port " + session.RemoteEndPoint.Port.ToString());
            currentSession = session;
        }
Exemplo n.º 11
0
        private static void ProcessCommand(WebSocketSession session, string value)
        {
            Command command = JsonConvert.DeserializeObject <Command>(value);

            if (command.Token != Bus.AuthToken)
            {
                BusLogger.LogException(new InvalidAuthTokenException("INVALID AUTHENTICATION TOKEN ERROR"));
                session.Send(JsonConvert.SerializeObject(CommandProcessor.CommandCallback("error_message", "An incorrect authentication key was provided")));
                return;
            }

            session.Send(CommandProcessor.RunCommand(command));
            session.Close();
        }
Exemplo n.º 12
0
        /// <summary>
        /// Releases unmanaged and - optionally - managed resources.
        /// </summary>
        /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                Logger.Verbose($"[{SessionKey}] Disposing EtpServer for {GetType().Name}");

                CloseWebSocket("Shutting down");
                _session?.Close();

                Logger.Verbose($"[{SessionKey}] Disposed EtpServer for {GetType().Name}");
            }

            base.Dispose(disposing);

            _session = null;
        }
Exemplo n.º 13
0
 /// <summary>
 /// 关闭服务器与客户端的会话连接
 /// </summary>
 /// <param name="appSession"></param>
 /// <param name="MsgText"></param>
 void CloseClientConnection(WebSocketSession appSession, string MsgText)
 {
     appSession.Close(CloseReason.ServerClosing);
     appSession.CloseWithHandshake(200, MsgText);
     return;
 }
Exemplo n.º 14
0
 private static void appServer_SessionClosed(WebSocketSession session, SuperSocket.SocketBase.CloseReason value)
 {
     //sessionManager.Remove(session.SessionID.ToString());
     session.Close();
 }
Exemplo n.º 15
0
 public override void ExecuteCommand(WebSocketSession session, SubRequestInfo requestInfo)
 {
     session.Close();
 }
Exemplo n.º 16
0
 protected override void OnSessionNewMessage(WebSocketSession session, WebSocketMessage message)
 {
     if (message.Opcode == WebSocketOpcode.Text)
     {
         string       m           = Encoding.UTF8.GetString(message.Message);
         ChatProtocol chatMessage = JsonConvert.DeserializeObject <ChatProtocol>(m);
         if (string.IsNullOrEmpty(chatMessage.UserName))
         {
             session.Close("UserName missed", WebSocketCloseStatusCode.InternalServerError);
             Sessions.Remove(session.SessionID);
             return;
         }
         if (chatMessage.CommandType == "Login")
         {
             if (Room.ContainsUser(chatMessage.UserName))
             {
                 chatMessage.CommandType = "Error";
                 chatMessage.Message     = "User have been already in chatroom";
                 session.Close("User have already logined", WebSocketCloseStatusCode.InternalServerError);
                 Sessions.Remove(session.SessionID);
                 return;
             }
             else
             {
                 Room.AddUser(chatMessage.UserName, session.RemoteEndpoint);
                 var remotelist = Room.RemoteEndpointList;
                 foreach (var remote in remotelist)
                 {
                     WebSocketSession s = Sessions[remote];
                     if (s != null)
                     {
                         if (!s.Send(m))
                         {
                             Sessions.Remove(session.SessionID);
                             string user = Room.GetUser(remote);
                             if (!string.IsNullOrEmpty(user))
                             {
                                 Room.RemoveUser(user);
                             }
                         }
                     }
                 }
                 return;
             }
         }
         else if (chatMessage.CommandType == "Message")
         {
             var remotelist = Room.RemoteEndpointList;
             foreach (var remote in remotelist)
             {
                 WebSocketSession s = Sessions[remote];
                 if (s != null)
                 {
                     if (!s.Send(m))
                     {
                         Sessions.Remove(session.SessionID);
                         string user = Room.GetUser(remote);
                         if (!string.IsNullOrEmpty(user))
                         {
                             Room.RemoveUser(user);
                         }
                     }
                 }
             }
         }
         else
         {
             return;
         }
     }
 }
Exemplo n.º 17
0
 void ProcessMessage(WebSocketSession session,string type,string[] args)
 {
     switch(type){
     case "join":
         var result=CheckJoinRequset(session,args);
         session.Send(CreateMessage(new[]{"joinres",(string)result.IsSucceeded.ToString(),(string)result.Message}));
         if(result.IsSucceeded){
             if(NewUserAdded!=null){
                 sessions.Add(args[0],session);
                 NewUserAdded(session,new UserEventArgs(args[0]));
             }
         }else session.Close();
         break;
     case "message":
         var name=sessions.FirstOrDefault(pair=>pair.Value==session).Key;
         if(name!=""&&args.Length>0&&MessageReceived!=null)
             MessageReceived(session,new MessageReceivedEventArgs(name,args[0]));
         break;
     case "screenshotres":
         name=sessions.FirstOrDefault(pair=>pair.Value==session).Key;
         if(name!=""&&args.Length>0){
             ThreadPool.QueueUserWorkItem((arg)=>{
                 var data=ConvertData(arg as string);
                 if(ScreenShotReceived!=null)
                     ScreenShotReceived(session,new ScreenShotReceivedEventArgs(name,data));
             },args[0]);
         }
         break;
     default:
         break;
     }
 }
Exemplo n.º 18
0
        static void socketServer_NewSessionConnected(WebSocketSession session)
        {
            String acceptedOrigin = "http://192.168.31.68";
            //Console.WriteLine(session.RemoteEndPoint.Address.ToString());
            Console.WriteLine(session.Origin);
            if (session.Origin.Equals(acceptedOrigin)) {
                lock (m_SessionSyncRoot)
                    m_Sessions.Add (session);

                SendToAll ("System: " + session.SessionID + " connected");
            } else {
                session.Close(CloseReason.SocketError);
            }
        }
Exemplo n.º 19
0
 public override void ExecuteCommand(WebSocketSession session, SubRequestInfo requestInfo)
 {
     session.Close();
 }
Exemplo n.º 20
0
        //--------------------------------------------------------------------------------------------------
        //--------------------------------WS     --------------------------------------------------
        //--------------------------------------------------------------------------------------------------

        private static void socketServer_NewSessionConnected(WebSocketSession session)
        {
            var portName = session.Path.Replace("/", "");
            if (portName != null && portName != "")
            {
                portName = portName.Replace("/", "");
                Info("Sock client " + session.SessionID + " connected with path " + portName);
                try
                {
                    var cfg = PortOpen(portName, 0);
                    session.Send(JsonConvert.SerializeObject(cfg));
                    session.Path = portName;
                    return;
                }
                catch (Exception e){
                    session.Send("{ \"error\": \"" + e.Message + "\"}");
                }
            }
            else
            {
                Info("Sock client " + session.SessionID + " connected without path ");
                session.Send(JsonConvert.SerializeObject(ComPortConfigs));
            }
            session.Close();
        }
Exemplo n.º 21
0
 public override void ExecuteCommand(WebSocketSession session, StringCommandInfo commandInfo)
 {
     session.Close();
 }
Exemplo n.º 22
0
 public override void Dispose()
 {
     // TODO: Investigate the other Close methods that might let us transmit a last message saying that the server closed the connection on purpose.
     socket.Close();
 }
Exemplo n.º 23
0
        /// <summary>
        /// indicates a string message received
        /// </summary>
        /// <param name="aSession">WebSocket session info</param>
        /// <param name="aValue">message serialized to string</param>
        void OnNewMessageReceived(WebSocketSession aSession, string aValue)
        {
            try
            {
                // 'test code' is usefull to test client's request.
                #region test code

                /*if (aValue == "L" || aValue == "l")
                 * {
                 *  LoginRequest aRequest = new LoginRequest("DemoUser", "demo");
                 *
                 *  aValue = JsonConvert.SerializeObject(aRequest);
                 * }
                 * else if (aValue == "O" || aValue == "o")
                 * {
                 *  LogoutRequest aRequest = new LogoutRequest();
                 *
                 *  aValue = JsonConvert.SerializeObject(aRequest);
                 * }
                 * else if (aValue == "S" || aValue == "s")
                 * {
                 *  SubscribeRequest aRequest = new SubscribeRequest(new SymbolItem() { Symbol = "MSFT", DataFeed = "Simulation DataFeed", Exchange = String.Empty, Type = 1 });
                 *
                 *  aValue = JsonConvert.SerializeObject(aRequest);
                 * }
                 * else if (aValue == "U" || aValue == "u")
                 * {
                 *  UnsubscribeRequest aRequest = new UnsubscribeRequest(new SymbolItem() { Symbol = "MSFT", DataFeed = "Simulation DataFeed", Exchange = String.Empty, Type = 1 });
                 *
                 *  aValue = JsonConvert.SerializeObject(aRequest);
                 * }
                 * else if (aValue == "HD" || aValue == "hd")
                 * {
                 *  HistoryRequest aRequest = new HistoryRequest()
                 *  {
                 *      Selection = new HistoryParameters()
                 *      {
                 *          Symbol = new SymbolItem() { Symbol = "MSFT", DataFeed = "DDF", Exchange = String.Empty, Type = 1 },
                 *          Periodicity = CommonObjects.Periodicity.Day,
                 *          Interval = 1,
                 *          Id = Guid.NewGuid().ToString("N"),
                 *          BarsCount = 100,
                 *          From = new DateTime(DateTime.MinValue.Ticks, DateTimeKind.Utc),
                 *          To = new DateTime(DateTime.MinValue.Ticks, DateTimeKind.Utc)
                 *      }
                 *  };
                 *  aValue = JsonConvert.SerializeObject(aRequest);
                 * }
                 * //else if (aValue == "HM" || aValue == "hm")
                 * //{
                 * //    HistoryRequest aRequest = new HistoryRequest()
                 * //    {
                 * //        Selection = new HistoryParameters()
                 * //        {
                 * //            Symbol = new SymbolItem() { Symbol = "MSFT", DataFeed = "DDF", Exchange = String.Empty, Type = 1 },
                 * //            Periodicity = CommonObjects.Periodicity.Minute,
                 * //            Interval = 1,
                 * //            Id = Guid.NewGuid().ToString("N"),
                 * //            BarsCount = 1000,
                 * //            From = new DateTime(DateTime.MinValue.Ticks, DateTimeKind.Utc),
                 * //            To = new DateTime(DateTime.MinValue.Ticks, DateTimeKind.Utc)
                 * //        }
                 * //    };
                 * //    aValue = JsonConvert.SerializeObject(aRequest);
                 * //}
                 * else if (aValue == "HM" || aValue == "hm")
                 * {
                 *  HistoryRequest aRequest = new HistoryRequest()
                 *  {
                 *      Selection = new HistoryParameters()
                 *      {
                 *          Symbol = new SymbolItem() { Symbol = "MSFT", DataFeed = "DDF", Exchange = String.Empty, Type = 1 },
                 *          Periodicity = CommonObjects.Periodicity.Minute,
                 *          Interval = 1,
                 *          Id = Guid.NewGuid().ToString("N"),
                 *          BarsCount = 100,
                 *          From = DateTime.UtcNow.Date.AddDays(-1),
                 *          To = DateTime.UtcNow
                 *      }
                 *  };
                 *  aValue = JsonConvert.SerializeObject(aRequest);
                 * }*/
                #endregion

                RequestMessage aBaseTypeReq   = JsonConvert.DeserializeObject <RequestMessage>(aValue);
                RequestMessage requestMessage = null;

                if (aBaseTypeReq.MsgType == typeof(LoginRequest).Name)
                {
                    LoginRequest aLoginRequest = JsonConvert.DeserializeObject <LoginRequest>(aValue);

                    if (DataServer.MessageRouter.gMessageRouter.Authenticate(aLoginRequest.Login, aLoginRequest.Password))
                    {
                        WebSocketUserInfo aUserInfo;

                        aUserInfo = new WebSocketUserInfo(aLoginRequest.Login, aSession);
                        lock (DataServer.MessageRouter.gMessageRouter)
                        {
                            DataServer.MessageRouter.gMessageRouter.AddSession(aUserInfo.ID, aUserInfo);
                        }
                        WriteToLog_Info(String.Format("Login succeeded: user = '******' id = '{1}'", aLoginRequest.Login, aUserInfo.ID), null);
                        //aSession.Send(JsonConvert.SerializeObject(new LoginResponse(aUserInfo.Login)));
                        aSession.Send(JsonConvert.SerializeObject(new LoginResponse()
                        {
                            Login = aLoginRequest.Login
                        }));
                    }
                    else
                    {
                        WriteToLog_Warning(String.Format("Login error: user = '******'", aLoginRequest.Login), null);
                        //aSession.Send(JsonConvert.SerializeObject(new LoginResponse() { Login = aLoginRequest.Login }));
                        aSession.Send(JsonConvert.SerializeObject(new LoginResponse()
                        {
                            Login = aLoginRequest.Login,
                            Error = String.Format("Logon error: {0} account is not validated", aLoginRequest.Login)
                        }));
                        //aSession.Send(JsonConvert.SerializeObject(new ErrorInfo(String.Format("Logon error: {0} account is not validated", aLoginRequest.Login))));
                        aSession.Close();

                        return;
                    }
                }
                else if (aBaseTypeReq.MsgType == typeof(LogoutRequest).Name)
                {
                    var aLogoutRequest = JsonConvert.DeserializeObject <LogoutRequest>(aValue);

                    WriteToLog_Info(String.Format("Logout : id = '{0}'", aSession.SessionID), null);
                    aSession.Close();
                }
                else if (aBaseTypeReq.MsgType == typeof(RemoteNotificationRequest).Name)
                {
                    if (DataServer.MessageRouter.gMessageRouter.RemoteNotificator != null)
                    {
                        var aRemoteNotificationRequest =
                            JsonConvert.DeserializeObject <RemoteNotificationRequest>(aValue);
                        lock (DataServer.MessageRouter.gMessageRouter)
                        {
                            string aCurrentUserName =
                                DataServer.MessageRouter.gMessageRouter.GetUserInfo(aSession.SessionID).Login;
                            try
                            {
                                DataServer.MessageRouter.gMessageRouter.RemoteNotificator.SetDeviceTokenAndTypeForUser(
                                    aCurrentUserName, aRemoteNotificationRequest.DeviceToken,
                                    aRemoteNotificationRequest.DeviceType);
                            }
                            catch
                            {
                            }
                        }
                    }
                }
                else if (aBaseTypeReq.MsgType == typeof(DataFeedListRequest).Name)
                {
                    requestMessage = JsonConvert.DeserializeObject <DataFeedListRequest>(aValue);
                }
                else if (aBaseTypeReq.MsgType == typeof(SubscribeRequest).Name)
                {
                    requestMessage = JsonConvert.DeserializeObject <SubscribeRequest>(aValue);
                }
                else if (aBaseTypeReq.MsgType == typeof(UnsubscribeRequest).Name)
                {
                    requestMessage = JsonConvert.DeserializeObject <UnsubscribeRequest>(aValue);
                }
                else if (aBaseTypeReq.MsgType == typeof(HistoryRequest).Name)
                {
                    requestMessage = JsonConvert.DeserializeObject <HistoryRequest>(aValue);

                    /*aHistoryRequest.Selection.From = aHistoryRequest.Selection.From.ToUniversalTime();
                     * aHistoryRequest.Selection.To = aHistoryRequest.Selection.To.ToUniversalTime();*/
                }
                else if (aBaseTypeReq.MsgType == typeof(AlertSubscribeRequest).Name)
                {
                    requestMessage = JsonConvert.DeserializeObject <AlertSubscribeRequest>(aValue);
                }
                else if (aBaseTypeReq.MsgType == typeof(AlertUnsubscribeRequest).Name)
                {
                    requestMessage = JsonConvert.DeserializeObject <AlertUnsubscribeRequest>(aValue);
                }
                else if (aBaseTypeReq.MsgType == typeof(AlertsHistoryRequest).Name)
                {
                    requestMessage = JsonConvert.DeserializeObject <AlertsHistoryRequest>(aValue);
                }
                else if (aBaseTypeReq.MsgType == typeof(BacktestGetRequest).Name)
                {
                    requestMessage = JsonConvert.DeserializeObject <BacktestGetRequest>(aValue);
                }
                else if (aBaseTypeReq.MsgType == typeof(L2SubscribeRequest).Name)
                {
                    requestMessage = JsonConvert.DeserializeObject <L2SubscribeRequest>(aValue);
                }
                else if (aBaseTypeReq.MsgType == typeof(L2UnsubscribeRequest).Name)
                {
                    requestMessage = JsonConvert.DeserializeObject <L2UnsubscribeRequest>(aValue);
                }
                else
                {
                    ///need implement
                    //throw new ApplicationException(String.Format("{0} message is unknown.", aBaseTypeReq.MsgType));
                }

                if (requestMessage != null)
                {
                    lock (DataServer.MessageRouter.gMessageRouter)
                    {
                        WebSocketUserInfo aUserInfo = DataServer.MessageRouter.gMessageRouter.GetUserInfo(aSession.SessionID) as WebSocketUserInfo;
                        if (aUserInfo != null)
                        {
                            DataServer.MessageRouter.gMessageRouter.ProcessRequest(aUserInfo.ID, requestMessage);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                WriteToLog(aValue, e);
                aSession.Send(JsonConvert.SerializeObject(new ErrorInfo("DataServer Error: unexpected message received")));
                aSession.Close();
            }
        }
Exemplo n.º 24
0
 void appServer_SessionClosed(WebSocketSession session, SuperSocket.SocketBase.CloseReason value)
 {
     this.listBox1.Items.Add(value.ToString());
     session.Close();
 }
Exemplo n.º 25
0
 public void Close()
 {
     session.Close(SuperSocket.SocketBase.CloseReason.ClientClosing);
 }
Exemplo n.º 26
0
 public void Disconnect()
 {
     m_WebSocketSession.Close();
 }
Exemplo n.º 27
0
        private void OnMessageReceived(WebSocketSession session, string m)
        {
            try
            {
                var client = ClientsCollection.Get(session);
                if (client == null)
                {
                    return;
                }

                var r = JsonSerializeHelper.Deserialize <Message>(m);
                switch (r.MsgType)
                {
                case "RegistrationRequest":
                {
                    if (client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request        = JsonSerializeHelper.Deserialize <RegistrationRequest>(m);
                    var responseString = "";

                    if (string.IsNullOrEmpty(request.Login) || string.IsNullOrEmpty(request.Password))
                    {
                        responseString = JsonSerializeHelper.Serialize(new ErrorResponse("Bad request"));
                    }
                    else if (DataProvider.IsUsernameExists(request.Login))
                    {
                        responseString = JsonSerializeHelper.Serialize(new RegistrationResponse
                            {
                                ReqID = request.ReqID,
                                Error = "Someone with this username already exists"
                            });
                    }
                    else
                    {
                        responseString = DataProvider.AddAccount(request.Login, request.Password, request.Email, request.Card)
                                   ? JsonSerializeHelper.Serialize(new RegistrationResponse {
                                ReqID = request.ReqID
                            })
                                   : JsonSerializeHelper.Serialize(new RegistrationResponse {
                                ReqID = request.ReqID, Error = "Undefined error"
                            });
                    }

                    session.Send(responseString);
                    break;
                }

                case "LoginRequest":
                {
                    if (client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("User Already logged in to server")));
                        return;
                    }

                    var request        = JsonSerializeHelper.Deserialize <LoginRequest>(m);
                    var responseString = "";

                    if (DataProvider.ValidateUserCredentials(request.Login, request.Password))
                    {
                        client.Username    = request.Login;
                        client.Password    = request.Password;
                        client.IsLoggedIn  = true;
                        client.AccountInfo = DataProvider.GetAccountInfo(client.Username);
                        responseString     = JsonSerializeHelper.Serialize(new LoginResponse
                            {
                                ReqID = request.ReqID
                            });

                        _connectedUsers.Add(new UserSession()
                            {
                                UserName = client.Username
                                ,
                                Session = session
                            });
                    }
                    else
                    {
                        responseString = JsonSerializeHelper.Serialize(new LoginResponse
                            {
                                ReqID = request.ReqID,
                                Error = "Invalid credentials"
                            });
                    }

                    session.Send(responseString);
                    break;
                }

                case "LogoutRequest":
                {
                    var request        = JsonSerializeHelper.Deserialize <LogoutRequest>(m);
                    var responseString = client.IsLoggedIn
                                 ? JsonSerializeHelper.Serialize(new LogoutResponse {
                            ReqID = request.ReqID
                        })
                                 : JsonSerializeHelper.Serialize(new ErrorResponse("No user session availble with server"));
                    session.Send(responseString);
                    session.Close();
                    break;
                }

                case "QuotesSubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <QuotesSubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.AddQuote(request.Symbol.Name);
                    break;
                }

                case "QuotesUnsubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <QuotesUnsubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.RemoveQuote(request.Symbol.Name);
                    break;
                }

                case "AccountInfoGetRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request  = JsonSerializeHelper.Deserialize <AccountInfoGetRequest>(m);
                    var response = new AccountInfoGetResponse
                    {
                        ReqID       = request.ReqID,
                        AccountData = client.AccountInfo,
                    };
                    session.Send(JsonSerializeHelper.Serialize(response));
                    break;
                }

                case "AccountInfoSubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <AccountInfoSubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.AccountInfo = true;
                    break;
                }

                case "AccountInfoUnsubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <AccountInfoUnsubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.AccountInfo = false;
                    break;
                }

                case "AssetsGetRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request  = JsonSerializeHelper.Deserialize <AssetsGetRequest>(m);
                    var response =
                        new AssetsGetResponse
                    {
                        ReqID  = request.ReqID,
                        Assets = DataProvider.GetAssets()
                    };
                    session.Send(JsonSerializeHelper.Serialize(response));
                    break;
                }

                case "AssetsGetBySymbolRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var   request   = JsonSerializeHelper.Deserialize <AssetsGetBySymbolRequest>(m);
                    var   timestamp = (TimestampUtility.GetCurrentTimestamp() / 1000) + DataProvider.StopExpiryLimitinMinutes * 60;
                    var   asset     = DataProvider.GetAssets(request.Symbol);
                    Asset temp      = new Asset();
                    if (asset != null)
                    {
                        temp.ID             = asset.ID;
                        temp.Symbol         = asset.Symbol;
                        temp.ExpiryTimeList = asset.ExpiryTimeList.Where(x => (x.ExpiryTimestamps / 1000) > timestamp)
                                              .Take(4)
                                              .ToList <ExpiryTime>();
                    }
                    var response =
                        new AssetsGetBySymbolResponse
                    {
                        ReqID  = request.ReqID,
                        Assets = temp
                    };
                    session.Send(JsonSerializeHelper.Serialize(response));
                    break;
                }

                case "BarsSubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <BarsSubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.AddBarSubscription(request.ID, request.Symbol.Name, request.Periodicity, request.Interval);
                    break;
                }

                case "BarsUnsubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <BarsUnsubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.RemoveBarSubscription(request.ID);
                    break;
                }

                case "HistoryGetRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <HistoryGetRequest>(m);
                    var bars    = request.BarsCount == 0
                                ? DataProvider.GetHistory(request.Symbol, request.Periodicity, request.Interval, request.StartTimestamp)
                                : DataProvider.GetHistory(request.Symbol, request.Periodicity, request.Interval, request.BarsCount);
                    var response = new HistoryGetResponse(request.ReqID, bars);
                    session.Send(JsonSerializeHelper.Serialize(response));
                    break;
                }

                case "OrderPlaceRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }
                    var    request   = JsonSerializeHelper.Deserialize <OrderPlaceRequest>(m);
                    string res       = string.Empty;
                    var    asset     = DataProvider.GetAssetById(request.OptionID);
                    var    valResult = DataProvider.ValidateOrder(client.AccountInfo, asset, request);
                    if (!String.IsNullOrEmpty(valResult))
                    {
                        var response = new OrderPlaceResponse
                        {
                            ReqID   = request.ReqID,
                            ClOrdID = request.ClOrdID,
                            Error   = valResult
                        };
                        res = JsonSerializeHelper.Serialize(response);
                        session.Send(res);
                    }
                    else
                    {
                        if (request.OptionType == Enums.OptionType.Express)
                        {
                            request.ExpiryTimestamp = DataProvider.GetCurrentTimestamp() + (request.ExpressExpiryInSeconds * 1000);
                        }
                        DateTime expiry   = TimestampUtility.TimestampToDateTime(request.ExpiryTimestamp);
                        var      order    = DataProvider.PlaceOrder(client.AccountInfo, asset, request);
                        var      response = new OrderPlaceResponse
                        {
                            ReqID    = request.ReqID,
                            ClOrdID  = request.ClOrdID,
                            SrvOrdID = order.ID,
                            Expiry   = expiry
                        };
                        res = JsonSerializeHelper.Serialize(response);
                        session.Send(res);
                        sendSubcriptionNotification(session, client, order);
                    }
                    Logger.Log(client.Username, "OrderPlaceRequest", m, res, !String.IsNullOrEmpty(valResult));
                    break;
                }

                case "OrderCancelRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <OrderCancelRequest>(m);
                    var order   = DataProvider.CancelOrder(client.AccountInfo, request.SrvOrdID);

                    if (order == null)
                    {
                        var response = new OrderCancelResponse
                        {
                            ReqID    = request.ReqID,
                            SrvOrdID = request.SrvOrdID,
                            Error    = "Error"
                        };
                        session.Send(JsonSerializeHelper.Serialize(response));
                    }
                    else
                    {
                        var response = new OrderCancelResponse
                        {
                            ReqID    = request.ReqID,
                            SrvOrdID = request.SrvOrdID
                        };
                        session.Send(JsonSerializeHelper.Serialize(response));

                        //if (ClientsCollection.Get(session).Subscriptions.OpenOrders)
                        //{
                        //    session.Send(JsonSerializeHelper.Serialize(new OpenOrdersSubscribeResponse
                        //    {
                        //        Orders = new List<Order> { order }
                        //    }));
                        //}

                        //if (ClientsCollection.Get(session).Subscriptions.OrderHistory)
                        //{
                        //    session.Send(JsonSerializeHelper.Serialize(new OrderHistorySubscribeResponse
                        //    {
                        //        Orders = new List<Order>{ order }
                        //    }));
                        //}

                        //if (ClientsCollection.Get(session).Subscriptions.AccountInfo)
                        //{
                        //    session.Send(JsonSerializeHelper.Serialize(new AccountInfoSubscribeResponse
                        //    {
                        //        AccountData = client.AccountInfo
                        //    }));
                        //}
                        sendSubcriptionNotification(session, client, order);
                    }
                    break;
                }

                case "OpenOrdersGetRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request  = JsonSerializeHelper.Deserialize <OpenOrdersGetRequest>(m);
                    var response = new OpenOrdersGetResponse
                    {
                        ReqID  = request.ReqID,
                        Orders = DataProvider.GetOpenOrders(client.AccountInfo)
                    };
                    session.Send(JsonSerializeHelper.Serialize(response));
                    break;
                }

                case "OpenOrdersSubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <OpenOrdersSubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.OpenOrders = true;
                    break;
                }

                case "OpenOrdersUnsubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <OpenOrdersUnsubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.OpenOrders = false;
                    break;
                }

                case "OrderHistoryGetRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request  = JsonSerializeHelper.Deserialize <OrderHistoryGetRequest>(m);
                    var response =
                        new OrderHistoryGetResponse
                    {
                        ReqID  = request.ReqID,
                        Orders = DataProvider.GetOrderHistory(client.AccountInfo)
                    };
                    session.Send(JsonSerializeHelper.Serialize(response));
                    break;
                }

                case "OrderHistorySubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <OrderHistorySubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.OrderHistory = true;
                    break;
                }

                case "OrderHistoryUnsubscribeRequest":
                {
                    if (!client.IsLoggedIn)
                    {
                        session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                        return;
                    }

                    var request = JsonSerializeHelper.Deserialize <OrderHistoryUnsubscribeRequest>(m);
                    ClientsCollection.Get(session).Subscriptions.OrderHistory = false;
                    break;
                }

                default:
                {
                    session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request")));
                    break;
                }
                }
            }
            catch (Exception e)
            {
                session.Send(JsonSerializeHelper.Serialize(new ErrorResponse("Bad request : " + e.Message)));
            }
        }
Exemplo n.º 28
0
 public void NewMessageReceived(WebSocketSession session, string message)
 {
     session.Close();
 }
Exemplo n.º 29
0
        public void OnMessage(byte[] data)
        {
            SimplePacket packet = StreamUtils.ReadPacket(data);

            lock (keepAliveSw)
                if (keepAliveSw.IsRunning)
                {
                    keepAliveSw.Restart();
                }
            switch (packet.Type)
            {
            case PacketType.WorkerInfo:
                if (Status == ClientWorkerStatus.Connecting)
                {
                    return;
                }
                Packets.WorkerInfo info = new Packets.WorkerInfo(packet);
                System = info.System;
                switch (info.Status)
                {
                case Packets.WorkerStatus.Error:
                    LastProgress = 0;
                    errorCallback?.Invoke(ErrorType.WorkerError);
                    errorCallback          = null;
                    progressChangeCallback = null;
                    workCallback           = null;
                    break;

                case Packets.WorkerStatus.Working:
                    LastProgress = info.OkPart;
                    status       = ClientWorkerStatus.Working;
                    progressChangeCallback?.Invoke(info.OkPart);
                    break;
                }
                break;

            case PacketType.TaskOutput:
                if (status != ClientWorkerStatus.Working)
                {
                    return;
                }
                LastProgress = 0;
                workCallback?.Invoke(packet.Data);
                errorCallback          = null;
                progressChangeCallback = null;
                workCallback           = null;
                break;

            case PacketType.WorkerAuth:
                if (status != ClientWorkerStatus.Connecting)
                {
                    return;
                }
                Packets.WorkerAuth response = new Packets.WorkerAuth(packet);
                if (!response.CheckPassword(Encoding.UTF8.GetBytes(this.info.Config["password"].Value <string>())))
                {
                    handler.RemoveClient(session.SessionID);
                    session.Close();
                    return;
                }
                status = ClientWorkerStatus.None;
                break;

            case PacketType.Signal:
                Packets.Signal signal = new Packets.Signal(packet);
                if (signal.Type == Packets.SignalEnum.Abort)
                {
                    if (status != ClientWorkerStatus.Working)
                    {
                        return;
                    }
                    LastProgress = 0;
                    errorCallback?.Invoke(ErrorType.TaskAbort);
                    errorCallback          = null;
                    progressChangeCallback = null;
                    workCallback           = null;
                }
                break;
            }
        }
Exemplo n.º 30
0
 protected override async Task Inner_Disconnect()
 {
     Client.Close();
 }