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) }); } } }
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; } } }