예제 #1
0
 private void CallService(ICollection <ServiceDelegate> list)
 {
     foreach (ServiceDelegate service in list)
     {
         if (service != null)
         {
             try {
                 service();
             } catch (Exception ex) {
                 ErrorRecorderHolder.recordError(ex);
             }
         }
     }
 }
예제 #2
0
 private void StopServiceThread()
 {
     lock (service_locker) {
         if (service_locker.Status == 1)
         {
             try {
                 this._serviceEvent.Set();
             } catch (Exception ex) {
                 ErrorRecorderHolder.recordError(ex);
             }
             service_locker.Status = 0;
         }
     }
 }
        private void PushService(string name, IDictionary <string, object> data)
        {
            lock (self_locker) {
                if (this._actionDict.ContainsKey(name))
                {
                    Action <IDictionary <string, object> > action = this._actionDict[name];

                    try {
                        if (action != null)
                        {
                            action(data);
                        }
                    } catch (Exception ex) {
                        ErrorRecorderHolder.recordError(ex);
                    }
                }
            }
        }
예제 #4
0
        public void AddQuest(FPClient client, FPData data, IDictionary <string, object> payload, CallbackDelegate callback, int timeout)
        {
            if (data == null)
            {
                if (callback != null)
                {
                    callback(new CallbackData(new Exception("data is null!")));
                }
                return;
            }

            this.AddService(() => {
                if (client != null)
                {
                    byte[] bytes = new byte[0];

                    try {
                        using (MemoryStream outputStream = new MemoryStream()) {
                            MsgPack.Serialize(payload, outputStream);
                            outputStream.Seek(0, SeekOrigin.Begin);
                            bytes = outputStream.ToArray();
                        }
                    } catch (Exception ex) {
                        ErrorRecorderHolder.recordError(ex);

                        if (callback != null)
                        {
                            callback(new CallbackData(ex));
                        }

                        return;
                    }

                    data.SetPayload(bytes);
                    client.SendQuest(data, callback, timeout);
                }
            });
        }
        public void Service(FPData data, AnswerDelegate answer)
        {
            if (data == null)
            {
                return;
            }

            bool callCb = true;

            if (RTMConfig.KICKOUT == data.GetMethod())
            {
                callCb = false;
            }

            if (RTMConfig.SERVER_PUSH.kickOutRoom == data.GetMethod())
            {
                callCb = false;
            }

            IDictionary <string, object> payload = null;

            if (data.GetFlag() == 0 && data.JsonPayload() != null)
            {
                try {
                    if (callCb && answer != null)
                    {
                        answer(JSON_PAYLOAD, false);
                    }

                    payload = Json.Deserialize <IDictionary <string, object> >(data.JsonPayload());
                } catch (Exception ex) {
                    ErrorRecorderHolder.recordError(ex);
                }
            }

            if (data.GetFlag() == 1 && data.MsgpackPayload() != null)
            {
                try {
                    if (callCb && answer != null)
                    {
                        answer(MSGPACK_PAYLOAD, false);
                    }

                    using (MemoryStream inputStream = new MemoryStream(data.MsgpackPayload())) {
                        payload = MsgPackFix.Deserialize <IDictionary <string, object> >(inputStream, RTMRegistration.RTMEncoding);
                    }
                } catch (Exception ex) {
                    ErrorRecorderHolder.recordError(ex);
                }
            }

            if (payload != null)
            {
                try {
                    MethodInfo method = this._type.GetMethod(data.GetMethod());

                    if (method != null)
                    {
                        object[] paras = new object[] { payload };
                        method.Invoke(this, paras);
                    }
                } catch (Exception ex) {
                    ErrorRecorderHolder.recordError(ex);
                }
            }
        }