Esempio n. 1
0
        protected override void ConnectionReset()
        {
            try
            {
                base.ConnectionReset();
            }
            catch { }

            lock (_LocalWaiting)
                foreach (Guid id in _LocalWaiting.Keys.ToList())
                {
                    _LocalWaiting[id] = new Undeliverable(id);
                }

            List <Message> awaiting = new List <Message>();

            lock (_AwaitResponse)
            {
                awaiting = _AwaitResponse.Values.ToList();
                _AwaitResponse.Clear();
            }

            foreach (Message orig in awaiting)
            {
                orig.onResponse -= Waiting_onResponse;
                StopWaiting(orig);

                if (_ResponseReceivedQueue != null)
                {
                    _ResponseReceivedQueue.EnqueueObject(new object[] { orig, new Undeliverable(orig.MessageID) });
                }
            }
        }
Esempio n. 2
0
        public void SendMessage(MultiPlayerMessage message)
        {
            message.Sender = message.Sender ?? ServerId;
            lock (connectionsLock)
            {
                var client = GetClient(message.Recipient);

                try
                {
                    if (client == null)
                    {
                        throw new Exception($"The client {message.Recipient} is not connected at the moment");
                    }
                    else
                    {
                        serverNetworkProvider.SendMessageToClient(message.Serialize(), client);
                    }
                }
                catch (Exception ex)
                {
                    Error.Fire(ex.ToString());
                    Undeliverable.Fire(new UndeliverableEvent()
                    {
                        Message   = message,
                        Exception = ex
                    });
                    throw;
                }
            }
        }