예제 #1
0
        public void Register <TIn, TOut>(string path, DataDelegate <TIn, TOut> callback) where TIn : new()
        {
            _dataCallbacks[path] = async(devId, strm) =>
            {
                TIn data;
                try
                {
                    data = PayloadHelper.ReadData <TIn>(strm);
                }
                catch (Exception e)
                {
                    _logger.Warn(e, $"Error to deserialize input data '{path}'. Payload type {typeof(TIn).Name}");
                    await SendError(devId, path, ErrorType.ArgsError, e.Message, CancellationToken.None);

                    return;
                }

                try
                {
                    var result = await callback(devId, data);
                    await SendResult(devId, path, result, CancellationToken.None);
                }
                catch (Exception e)
                {
                    Status.Error($"Execute {path}:{e.Message}");
                    _logger.Warn(e, $"Error to execute '{path}':{e.Message}");
                    await SendError(devId, path, ErrorType.InternalError, e.Message, CancellationToken.None);
                }
            };
        }
    public void DoGetMessage <T>(string queryURL, DataDelegate <T> callback)
    {
    #if SILVERLIGHT
        Uri uri = new Uri(queryURL, UriKind.Absolute);

        var request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = "GET";
        request.Accept = "text/json";
        request.BeginGetResponse((result) =>
        {
            var response = request.EndGetResponse(result);
            var stream   = response.GetResponseStream();

            if (stream != null)
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
                T data = (T)serializer.ReadObject(stream);
                System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    callback(data);
                });
            }
            else
            {
                System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    callback(default(T));
                });
            }
        }, null);
    #endif
    }
예제 #3
0
 protected void Register <TIn, TOut>(string path, DataDelegate <TIn, TOut> callback) where TIn : new()
 {
     if (!path.StartsWith(_name, StringComparison.InvariantCultureIgnoreCase))
     {
         var absolutePath = PayloadHelper.PathJoin(_name, path);
         _server.Register(absolutePath, callback);
     }
 }
예제 #4
0
 public DataImportWizardP2(string file)
 {
     _excelFile = file;
     _dbManager = DBAccessManager.GetInstance();
     InitializeComponent();
     _dlgLbl = new DataDelegate(Update);
     _dlgPrg = new ProgressDelegate(UpdateProgress);
     new Thread(() => LoadData()).Start();
 }
예제 #5
0
        private static void OnIncomingDataEvent(string[] data)
        {
            DataDelegate handler = IncomingDataEvent;

            if (handler != null)
            {
                handler(data);
            }
        }
예제 #6
0
파일: Cell.cs 프로젝트: IsaacSherman/Thesis
 /// <summary>
 /// Sets the function at index to use dd.  Note that this uses +=, so multicasting is possible.
 /// </summary>
 /// <param name="index">index of the function</param>
 /// <param name="dd">DataDelegate of the form "double dd (object)"</param>
 public static void SetFunction(int index, DataDelegate dd)
 {
     if (index >= NumberOfFunctions || index < 0)
     {
         throw new IndexOutOfRangeException();
     }
     else
     {
         functions[index] += dd;
     }
 }
예제 #7
0
 protected void SendData()
 {
     if (this.label1.InvokeRequired)
     {
         DataDelegate dd = new DataDelegate(SendData);
         this.Invoke(dd);
     }
     else
     {
         this.label1.Text = this.A.ToString();
         this.Redraw();
     }
 }
예제 #8
0
파일: Cell.cs 프로젝트: IsaacSherman/Thesis
 private static void reinforceConstantRelations()
 {
     _notFlagStart     = 0;
     _functionStart    = _notFlagStart + _notFlagLength;
     NumberOfFunctions = OptoGlobals.NumberOfFeatures;
     _functionLength   = (int)Math.Ceiling(Math.Log(NumberOfFunctions, 2)); //So our cells will have enough bits to carry the necessary number of functions
     _lLimitStart      = _functionStart + _functionLength;
     _uLimitStart      = _lLimitStart + limitLength;
     _joinBitStart     = _uLimitStart + limitLength;
     CellLength        = _joinBitStart + _notFlagLength;
     functions         = new DataDelegate[NumberOfFunctions];
     initDelegatesAndNames();
 }
예제 #9
0
파일: Cell.cs 프로젝트: IsaacSherman/Thesis
 /// <summary>
 /// Sets the function at index to use dd.  Note that this uses -=.
 /// </summary>
 /// <param name="index">index of the function</param>
 /// <param name="dd">DataDelegate of the form "double dd (object)"</param>
 public static void RemoveFunction(int index, DataDelegate dd)
 {
     if (index >= NumberOfFunctions || index < 0)
     {
         throw new IndexOutOfRangeException();
     }
     else
     {
         if (functions[index] != null && dd != null)
         {
             functions[index] -= dd;
         }
     }
 }
예제 #10
0
            public MessageHandler(
                ClientCollection clients,
                DataDelegate dataHandler,
                ConnectionDelegate connectionHandler,
                TerminalDelegate terminalHandler,
                SecurityDelegate securityHandler
                )
            {
                this.clients = clients;

                this.DataHandler       = dataHandler;
                this.ConnectionHandler = connectionHandler;
                this.TerminalHandler   = terminalHandler;
                this.SecurityHandler   = securityHandler;
            }
예제 #11
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            RequestToServer req  = new RequestToServer(this);
            BBCNews         data = new BBCNews();

            _data = new BBCNewsList(data);

            _btnSearch.TouchUpInside += Search_Clicked;
            _searchTextField.Text     = "";

            _myCollectionView.RegisterNibForCell(MyCollectionViewCell.Nib, MyCollectionViewCell.Key);
            _dataDelegate = new DataDelegate();
            _myCollectionView.Delegate   = _dataDelegate;
            _myCollectionView.DataSource = new DataSourceNews(this, _data, NavigationController);
        }
예제 #12
0
파일: Message.cs 프로젝트: xrl/scamp
        /// <summary>
        /// Sets up a message for streaming consumption.
        /// </summary>
        /// <param name="onData">Called whenever new data is available</param>
        /// <param name="onEnd">Called at the end of the message</param>
        public void Consume(DataDelegate onData, EndDelegate onEnd)
        {
            if (Consumed)
            {
                throw new InvalidOperationException("consumption already started");
            }
            if (onData == null)
            {
                throw new ArgumentNullException("onData");
            }
            if (onEnd == null)
            {
                throw new ArgumentNullException("onEnd");
            }

            this.onData = onData;
            this.onEnd  = onEnd;
        }
 public void setCallBackDelegate(DataDelegate _delegate)
 {
     dataDelegate = _delegate;
 }
예제 #14
0
 public NormalDownloader(IStorageWrapper storageWrapper, IPiecePicker piecePicker, int backLog, double maxRatePeriod,
                         int piecesNumber, Measure downloadMeasure, double snubTime, DataDelegate measureFunction)
 {
     this.storageWrapper  = storageWrapper;
     this.piecePicker     = piecePicker;
     this.backLog         = backLog;
     this.maxRatePeriod   = maxRatePeriod;
     this.downloadMeasure = downloadMeasure;
     this.piecesNumber    = piecesNumber;
     this.snubTime        = snubTime;
     this.measureFunction = measureFunction;
     this.downloads       = new List <SingleDownload>();
 }
        /// <summary>
        /// Processes a websocket frame and triggers consumer events
        /// </summary>
        /// <param name="psocketState">We need to modify the websocket state here depending on the frame</param>
        private void ProcessFrame(WebSocketState psocketState)
        {
            if (psocketState.Header.IsMasked)
            {
                byte[] unmask = psocketState.ReceivedBytes.ToArray();
                WebSocketReader.Mask(psocketState.Header.Mask, unmask);
                psocketState.ReceivedBytes = new List <byte>(unmask);
            }

            switch (psocketState.Header.Opcode)
            {
            case WebSocketReader.OpCode.Ping:
                PingDelegate pingD = OnPing;
                if (pingD != null)
                {
                    pingD(this, new PingEventArgs());
                }

                WebSocketFrame pongFrame = new WebSocketFrame()
                {
                    Header = WebsocketFrameHeader.HeaderDefault(), WebSocketPayload = new byte[0]
                };
                pongFrame.Header.Opcode = WebSocketReader.OpCode.Pong;
                pongFrame.Header.IsEnd  = true;
                SendSocket(pongFrame.ToBytes());
                break;

            case WebSocketReader.OpCode.Pong:

                PongDelegate pongD = OnPong;
                if (pongD != null)
                {
                    pongD(this, new PongEventArgs()
                    {
                        PingResponseMS = Util.EnvironmentTickCountSubtract(Util.EnvironmentTickCount(), _pingtime)
                    });
                }
                break;

            case WebSocketReader.OpCode.Binary:
                if (!psocketState.Header.IsEnd)     // Not done, so we need to store this and wait for the end frame.
                {
                    psocketState.ContinuationFrame = new WebSocketFrame
                    {
                        Header           = psocketState.Header,
                        WebSocketPayload =
                            psocketState.ReceivedBytes.ToArray()
                    };
                }
                else
                {
                    // Send Done Event!
                    DataDelegate dataD = OnData;
                    if (dataD != null)
                    {
                        dataD(this, new WebsocketDataEventArgs()
                        {
                            Data = psocketState.ReceivedBytes.ToArray()
                        });
                    }
                }
                break;

            case WebSocketReader.OpCode.Text:
                if (!psocketState.Header.IsEnd)     // Not done, so we need to store this and wait for the end frame.
                {
                    psocketState.ContinuationFrame = new WebSocketFrame
                    {
                        Header           = psocketState.Header,
                        WebSocketPayload =
                            psocketState.ReceivedBytes.ToArray()
                    };
                }
                else
                {
                    TextDelegate textD = OnText;
                    if (textD != null)
                    {
                        textD(this, new WebsocketTextEventArgs()
                        {
                            Data = Encoding.UTF8.GetString(psocketState.ReceivedBytes.ToArray())
                        });
                    }

                    // Send Done Event!
                }
                break;

            case WebSocketReader.OpCode.Continue:      // Continuation.  Multiple frames worth of data for one message.   Only valid when not using Control Opcodes
                //Console.WriteLine("currhead " + psocketState.Header.IsEnd);
                //Console.WriteLine("Continuation! " + psocketState.ContinuationFrame.Header.IsEnd);
                byte[] combineddata = new byte[psocketState.ReceivedBytes.Count + psocketState.ContinuationFrame.WebSocketPayload.Length];
                byte[] newdata      = psocketState.ReceivedBytes.ToArray();
                Buffer.BlockCopy(psocketState.ContinuationFrame.WebSocketPayload, 0, combineddata, 0, psocketState.ContinuationFrame.WebSocketPayload.Length);
                Buffer.BlockCopy(newdata, 0, combineddata,
                                 psocketState.ContinuationFrame.WebSocketPayload.Length, newdata.Length);
                psocketState.ContinuationFrame.WebSocketPayload = combineddata;
                psocketState.Header.PayloadLen = (ulong)combineddata.Length;
                if (psocketState.Header.IsEnd)
                {
                    if (psocketState.ContinuationFrame.Header.Opcode == WebSocketReader.OpCode.Text)
                    {
                        // Send Done event
                        TextDelegate textD = OnText;
                        if (textD != null)
                        {
                            textD(this, new WebsocketTextEventArgs()
                            {
                                Data = Encoding.UTF8.GetString(combineddata)
                            });
                        }
                    }
                    else if (psocketState.ContinuationFrame.Header.Opcode == WebSocketReader.OpCode.Binary)
                    {
                        // Send Done event
                        DataDelegate dataD = OnData;
                        if (dataD != null)
                        {
                            dataD(this, new WebsocketDataEventArgs()
                            {
                                Data = combineddata
                            });
                        }
                    }
                    else
                    {
                        // protocol violation
                    }
                    psocketState.ContinuationFrame = null;
                }
                break;

            case WebSocketReader.OpCode.Close:
                Close(string.Empty);

                break;
            }
            psocketState.Header.SetDefault();
            psocketState.ReceivedBytes.Clear();
            psocketState.ExpectedBytes = 0;
        }
예제 #16
0
        public void Init(Syscalls syscalls, Core core, Runtime runtime)
        {
            runtime.RegisterCleaner(delegate()
            {
                foreach (KeyValuePair <int, Connection> p in mConnections)
                {
                    p.Value.close();
                }
                mConnections.Clear();
            });

            mResultHandler = delegate(int handle, int connOp, int result)
            {
                Memory evt = new Memory(4 * 4);
                evt.WriteInt32(MoSync.Struct.MAEvent.type, MoSync.Constants.EVENT_TYPE_CONN);
                evt.WriteInt32(MoSync.Struct.MAEvent.conn.handle, handle);
                evt.WriteInt32(MoSync.Struct.MAEvent.conn.opType, connOp);
                evt.WriteInt32(MoSync.Struct.MAEvent.conn.result, result);
                runtime.PostEvent(new Event(evt));
            };

            syscalls.maConnect = delegate(int _url)
            {
                String url = core.GetDataMemory().ReadStringAtAddress(_url);
                //Util.Log("maConnect(" + url + ")\n");
                if (url.StartsWith("btspp"))
                {
                    return(MoSync.Constants.CONNERR_UNAVAILABLE);
                }
                Uri        uri = new Uri(url);
                Connection c;
                if (uri.Scheme.Equals("socket"))
                {
                    c = new SocketConnection(uri, mNextConnHandle);
                }
                else if (uri.Scheme.Equals("http") || uri.Scheme.Equals("https"))
                {
                    c = new WebRequestConnection(uri, mNextConnHandle, MoSync.Constants.HTTP_GET);
                }
                else
                {
                    return(MoSync.Constants.CONNERR_GENERIC);
                }

                c.connect(mResultHandler);
                mConnections.Add(mNextConnHandle, c);
                return(mNextConnHandle++);
            };

            syscalls.maConnClose = delegate(int _conn)
            {
                Connection c = mConnections[_conn];
                c.close();
                mConnections.Remove(_conn);
            };

            syscalls.maConnGetAddr = delegate(int _conn, int _addr)
            {
                if (_conn == MoSync.Constants.HANDLE_LOCAL)                 // unavailable
                {
                    return(-1);
                }
                Connection c = mConnections[_conn];
                return(c.getAddr(core.GetDataMemory(), _addr));
            };

            syscalls.maConnRead = delegate(int _conn, int _dst, int _size)
            {
                Connection c = mConnections[_conn];
                c.recv(core.GetDataMemory().GetData(), _dst, _size, mResultHandler);
            };

            DataDelegate dataDelegate = delegate(int _conn, int _data,
                                                 CommDelegate cd)
            {
                Connection c   = mConnections[_conn];
                Resource   res = runtime.GetResource(MoSync.Constants.RT_BINARY, _data);
                Stream     s   = (Stream)res.GetInternalObject();
                runtime.SetResourceRaw(_data, Resource.Flux);
                MemoryStream mem = null;
                if (s.GetType() == typeof(MemoryStream))
                {
                    mem = (MemoryStream)s;
                }
                else
                {
                    MoSync.Util.CriticalError("Only binaries (non-ubins) are allowed for maConn(Read/Write)(To/From)Data");
                }

                cd(c, mem.GetBuffer(),
                   delegate(int handle, int connOp, int result)
                {
                    runtime.SetResourceRaw(_data, res);
                    mResultHandler(handle, connOp, result);
                });
            };

            syscalls.maConnReadToData = delegate(int _conn, int _data, int _offset, int _size)
            {
                dataDelegate(_conn, _data,
                             delegate(Connection c, byte[] buf, ResultHandler rh)
                {
                    c.recv(buf, _offset, _size, rh);
                });
            };

            syscalls.maConnWrite = delegate(int _conn, int _src, int _size)
            {
                Connection c = mConnections[_conn];
                c.write(core.GetDataMemory().GetData(), _src, _size, mResultHandler);
            };

            syscalls.maConnWriteFromData = delegate(int _conn, int _data, int _offset, int _size)
            {
                dataDelegate(_conn, _data,
                             delegate(Connection c, byte[] buf, ResultHandler rh)
                {
                    c.write(buf, _offset, _size, rh);
                });
            };

            syscalls.maHttpCreate = delegate(int _url, int _method)
            {
                String url = core.GetDataMemory().ReadStringAtAddress(_url);
                //Util.Log("maHttpCreate(" + url + ")\n");
                Uri uri = new Uri(url);
                WebRequestConnection c = new WebRequestConnection(uri, mNextConnHandle, _method);
                mConnections.Add(mNextConnHandle, c);
                return(mNextConnHandle++);
            };

            syscalls.maHttpFinish = delegate(int _conn)
            {
                WebRequestConnection c = (WebRequestConnection)mConnections[_conn];
                c.connect(delegate(int handle, int connOp, int result)
                {
                    mResultHandler(handle, MoSync.Constants.CONNOP_FINISH, result);
                });
            };

            syscalls.maHttpSetRequestHeader = delegate(int _conn, int _key, int _value)
            {
                WebRequestConnection c = (WebRequestConnection)mConnections[_conn];
                String key             = core.GetDataMemory().ReadStringAtAddress(_key);
                String value           = core.GetDataMemory().ReadStringAtAddress(_value);
                if (value.Length > 0)
                {
                    c.setRequestHeader(key, value);
                }
            };

            syscalls.maHttpGetResponseHeader = delegate(int _conn, int _key, int _buffer, int _bufSize)
            {
                WebRequestConnection c = (WebRequestConnection)mConnections[_conn];
                String key             = core.GetDataMemory().ReadStringAtAddress(_key);
                String value           = c.getResponseHeader(key);
                if (value == null)
                {
                    return(MoSync.Constants.CONNERR_NOHEADER);
                }
                if (value.Length + 1 <= _bufSize)
                {
                    core.GetDataMemory().WriteStringAtAddress(_buffer, value, _bufSize);
                }
                return(value.Length);
            };
        }
예제 #17
0
 /// <summary>
 /// Constructor
 /// </summary>
 public AutoPumpQueue(DataDelegate dataDelegate)
 {
     m_Queue        = new Queue <T>();
     m_DataDelegate = dataDelegate;
 }
예제 #18
0
 public void setDeleteDelegate(DataDelegate command)
 {
     _deleteDelegate = command;
 }
예제 #19
0
 public void setUpdateDelegate(DataDelegate command)
 {
     _updateDelegate = command;
 }
예제 #20
0
 public static void addDelegate(DataDelegate myDelegate)
 {
     DataCallback      += myDelegate.onDataReceived;
     TurnCallback      += myDelegate.onTurnReceived;
     TurnCheckCallback += myDelegate.onTurnCheckReceived;
 }
예제 #21
0
        public void Process()
        {
            try
            {
                while (true)
                {
                    try
                    {
                        byte[]    Data           = GetRequest();
                        MResponse ClientResponse = Package.Unpacking <MResponse>(Data);

                        //bool isBreak = false;
                        bool IsCorrectKey = false;

                        Debug.Log($"Новый запрос от клиента [{NetworkClient.Id} - {NetworkClient.NetPoint}]: " +
                                  $"WindowUid - {ClientResponse.WindowUid}, KeyNetwork - {ClientResponse.KeyNetwork}");

                        foreach (var DataDelegate in NetworkDelegates.NetworkActions)
                        {
                            if (DataDelegate.WindowUid != -1)
                            {
                                if (DataDelegate.WindowUid == ClientResponse.WindowUid)
                                {
                                    if (CheckKeyNetwork(DataDelegate, ClientResponse))
                                    {
                                        DataDelegate.DataDelegate(ClientResponse, NetworkClient);
                                        IsCorrectKey = true;
                                        //isBreak = true;
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                if (CheckKeyNetwork(DataDelegate, ClientResponse))
                                {
                                    DataDelegate.DataDelegate(ClientResponse, NetworkClient);
                                    IsCorrectKey = true;
                                    //isBreak = true;
                                    break;
                                }
                            }

                            /*
                             * if (isBreak)
                             *  break;
                             */
                        }

                        if (!IsCorrectKey)
                        {
                            Debug.LogWarning("Не найдено делегатов с таким идентификатором!");
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.LogError($"Возникла ошибка при обработке пользовательского запроса.\n" +
                                       $"Информация о пользователе: [{NetworkClient.Id}] {NetworkClient.Ip}:{NetworkClient.Port}\n" +
                                       $"Код ошибки:\n" + ex);

                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.LogError("Возникла ошибка при обработке пользовательского процесса.\n" +
                               $"Информация о пользователе: [{NetworkClient.Id}] {NetworkClient.Ip}:{NetworkClient.Port}\n" +
                               $"Код ошибки:\n" + ex);
            }
            finally
            {
                Server.Users.Remove(NetworkClient);

                _ServerBase.RemoveConnection(NetworkClient.Id);
                Close();

                Debug.Log($"Пользовательский процесс завершён.\n" +
                          $"Информация о пользователе: [{NetworkClient.Id}] {NetworkClient.Ip}:{NetworkClient.Port}\n");
            }
        }