protected void Cleanup() { ClientFiber.Enqueue(() => { Send.Dispose(); Context1.Dispose(); Subscriber.Dispose(); Context2.Dispose(); }); Thread.Sleep(100); ClientFiber.Dispose(); }
public void Disconnect() { // Close the Listen thread first so sockets will be free connected = false; listenThread.Join(); // Then request that the server remove and cleanup anything // associated with this connection Request(req_end); // Finally dispose of any sockets world.Dispose(); interaction.Dispose(); }
public void Disconnect() { // First we set connected to false to prevent any new negotiations // while we are trying to disconnect. Then we request to end the // connection cleanly. This is a request to send the 'client end' // event from the world server which also send it to ourselves to // wakeup any errant listener threads connected = false; Request(req_end); listenThread.Join(); // Finally dispose of any sockets world.Dispose(); interaction.Dispose(); }
public void RecieveDataAsClient() { try { Task.Factory.StartNew(() => { while (!_ctsCancellationTokenSource.IsCancellationRequested) { byte[] _IncomingData = _subscribeSocket.ReceiveImmediate(); if (_IncomingData == null) { continue; } byte[] buffer = _IncomingData.Skip(10).Take(_IncomingData.Length - 2).ToArray(); //if ((MessageType)BitConverter.ToInt16(_IncomingData, 0) != MessageType.HEARTBEAT) //{ // cout = cout + 1; // eDataUpdate.Invoke(cout.ToString()); //} switch ((MessageType)BitConverter.ToInt16(_IncomingData, 0)) { case MessageType.ORDER: { //NNFPktCracker(buffer); short TransactionCode = 0; var MsgHeader = (Message_Header)DataPacket.RawDeserialize(buffer.Skip(0).Take(40).ToArray(), typeof(Message_Header)); TransactionCode = IPAddress.HostToNetworkOrder(MsgHeader.TransactionCode); checkCase(TransactionCode, buffer); break; } case MessageType.ORDERRej: { ORDERRej(buffer); break; } case MessageType.LOGIN: { NNFInOut.Instance.SIGN_ON_REQUEST_OUT(buffer); long client_Autoid = Global.Instance.ClientId - 100; _subscribeSocket.Subscribe( BitConverter.GetBytes((short)MessageType.ORDERRej).Concat(BitConverter.GetBytes(Global.Instance.ClientId)).ToArray()); _subscribeSocket.Subscribe( BitConverter.GetBytes((short)MessageType.MESSAGE).Concat(BitConverter.GetBytes(Global.Instance.ClientId)).ToArray()); _subscribeSocket.Subscribe( BitConverter.GetBytes((short)MessageType.HEARTBEAT).Concat(BitConverter.GetBytes(0)).ToArray()); _subscribeSocket.Subscribe( BitConverter.GetBytes((short)MessageType.ORDER).Concat(BitConverter.GetBytes(Global.Instance.ClientId)).ToArray()); _subscribeSocket.Subscribe( BitConverter.GetBytes((short)MessageType.ORDER).Concat(BitConverter.GetBytes(client_Autoid)).ToArray()); _subscribeSocket.Subscribe( BitConverter.GetBytes((short)MessageType.ORDERRej).Concat(BitConverter.GetBytes(client_Autoid)).ToArray()); _subscribeSocket.Subscribe( BitConverter.GetBytes((short)MessageType.MESSAGE).Concat(BitConverter.GetBytes(client_Autoid)).ToArray()); Global.LastTime = System.DateTime.Now; break; } case MessageType.MESSAGE: { MESSAGE(buffer); break; } case MessageType.HEARTBEAT: { HeartBeat(buffer); Global.LastTime = System.DateTime.Now; break; } default: MessageBox.Show("Some invalid packet recieved from Server Message Code " + "Error "); break; } _ctsCancellationTokenSource.Token.ThrowIfCancellationRequested(); } }, _ctsCancellationTokenSource.Token); } catch (OperationCanceledException e) { Console.WriteLine("Cancellation invoked"); } catch (AggregateException e) { if (e.InnerException is OperationCanceledException) { if (_requestSocket != null) { _requestSocket.Dispose(); } if (_subscribeSocket != null) { _subscribeSocket.Dispose(); } } else { Console.WriteLine("Some unexpected exception "); } } catch (Exception Ex) { Console.WriteLine("Exception Raised from Index " + " " + Ex.Message); } }