protected virtual void OnReceive(ServerSocketReceiveEventArgs e)
 {
     if (this.Receive != null)
     {
         this.Receive(this, e);
     }
 }
 protected virtual void OnReceive(ServerSocketReceiveEventArgs e)
 {
     try {
         this._server.OnReceive2(e);
     } catch (Exception ex) {
         this.OnError(ex);
     }
 }
示例#3
0
        protected virtual void OnReceive(object sender, ServerSocketReceiveEventArgs e)
        {
            switch (e.Messager.Action)
            {
            case "GetDatabases":
                ClientInfo ci = e.Messager.Arg as ClientInfo;
                if (ci == null)
                {
                    e.AcceptSocket.AccessDenied();
                }
                else
                {
                    CodeBuild build = new CodeBuild(ci, e.AcceptSocket);
                    lock (_builds_lock) {
                        _builds.Remove(e.AcceptSocket.Id);
                        _builds.Add(e.AcceptSocket.Id, build);
                    }
                    List <DatabaseInfo> dbs      = build.GetDatabases();
                    SocketMessager      messager = new SocketMessager(e.Messager.Action, dbs);
                    messager.Id = e.Messager.Id;
                    e.AcceptSocket.Write(messager);
                }
                break;

            case "GetTablesByDatabase":
                string database = string.Concat(e.Messager.Arg);
                if (string.IsNullOrEmpty(database))
                {
                    e.AcceptSocket.AccessDenied();
                }
                else
                {
                    CodeBuild build = null;
                    if (!_builds.TryGetValue(e.AcceptSocket.Id, out build))
                    {
                        e.AcceptSocket.AccessDenied();
                    }
                    else
                    {
                        List <TableInfo> tables   = build.GetTablesByDatabase(database);
                        SocketMessager   messager = new SocketMessager(e.Messager.Action, tables);
                        messager.Id = e.Messager.Id;
                        e.AcceptSocket.Write(messager);
                    }
                }
                break;

            case "Build":
                object[] parms = e.Messager.Arg as object[];
                if (parms.Length < 4)
                {
                    e.AcceptSocket.AccessDenied();
                }
                else
                {
                    string solutionName = string.Concat(parms[0]);
                    bool   isSolution, isMakeAdmin, isDownloadRes;
                    string op10 = string.Concat(parms[2]);
                    if (string.IsNullOrEmpty(solutionName) ||
                        !bool.TryParse(string.Concat(parms[1]), out isSolution) ||
                        string.IsNullOrEmpty(op10))
                    {
                        e.AcceptSocket.AccessDenied();
                    }
                    else
                    {
                        isMakeAdmin   = false;
                        isDownloadRes = false;
                        if (parms.Length >= 4)
                        {
                            bool.TryParse(string.Concat(parms[3]), out isMakeAdmin);
                        }
                        if (parms.Length >= 5)
                        {
                            bool.TryParse(string.Concat(parms[4]), out isDownloadRes);
                        }
                        CodeBuild build = null;
                        if (!_builds.TryGetValue(e.AcceptSocket.Id, out build))
                        {
                            e.AcceptSocket.AccessDenied();
                        }
                        else
                        {
                            List <bool> outputs = new List <bool>();
                            char[]      cs      = op10.ToCharArray();
                            foreach (char c in cs)
                            {
                                outputs.Add(c == '1');
                            }
                            build.SetOutput(outputs.ToArray());
                            object parm = null;
                            try {
                                parm = build.Build(solutionName, isSolution, isMakeAdmin, isDownloadRes);
                            } catch (Exception ex) {
                                parm = ex;
                            }
                            SocketMessager messager = new SocketMessager(e.Messager.Action, parm);
                            messager.Id = e.Messager.Id;
                            e.AcceptSocket.Write(messager);
                        }
                    }
                }
                break;

            default:
                e.AcceptSocket.AccessDenied();
                break;
            }
        }
    public AcceptSocket(ServerSocket server, TcpClient tcpClient, int id)
    {
        this._running    = true;
        this._id         = id;
        this._server     = server;
        this._tcpClient  = tcpClient;
        this._lastActive = DateTime.Now;
        this._thread     = new Thread(delegate() {
            while (this._running)
            {
                try {
                    NetworkStream ns = this._tcpClient.GetStream();
                    ns.ReadTimeout   = 1000 * 20;
                    if (ns.DataAvailable)
                    {
                        SocketMessager messager = base.Read(ns);
                        Server.Protocol.debugAppendLog?.Invoke(messager.ToString());
                        if (string.Compare(messager.Action, SocketMessager.SYS_TEST_LINK.Action) != 0)
                        {
                            ServerSocketReceiveEventArgs e = new ServerSocketReceiveEventArgs(this._receives++, messager, this);
                            SyncReceive receive            = null;

                            if (this._receiveHandlers.TryGetValue(messager.Id, out receive))
                            {
                                new Thread(delegate() {
                                    try {
                                        receive.ReceiveHandler(this, e);
                                    } catch (Exception ex) {
                                        this.OnError(ex);
                                    } finally {
                                        receive.Wait.Set();
                                    }
                                }).Start();
                            }
                            else
                            {
                                new Thread(delegate() {
                                    this.OnReceive(e);
                                }).Start();
                            }
                        }
                        this._lastActive = DateTime.Now;
                    }
                    else if (_accepted)
                    {
                        TimeSpan ts = DateTime.Now - _lastActive;
                        if (ts.TotalSeconds > 5)
                        {
                            this.Write(SocketMessager.SYS_TEST_LINK);
                        }
                    }
                    if (!ns.DataAvailable)
                    {
                        Thread.CurrentThread.Join(100);
                    }
                } catch (Exception ex) {
                    this._running = false;
                    this.OnError(ex);
                }
            }
            this.Close();
            this.OnClosed();
        });
        this._thread.Start();
    }
 internal void OnReceive2(ServerSocketReceiveEventArgs e)
 {
     this.OnReceive(e);
 }