Beispiel #1
0
        public async Task DisconnectAsync()
        {
            if (!IsConnected)
            {
                return;
            }
            try
            {
                Disconnecting?.Invoke(this, new ConnectionEventArgs($"Try to Disconnect\n{DateTime.UtcNow}\n{_hubConnection.ConnectionId}"));

                await _hubConnection.StopAsync();

                if (IsConnected)
                {
                    throw new InvalidOperationException("Disconnection faild");
                }

                Disconnected?.Invoke(this, new ConnectionEventArgs($"Disconnected\n{DateTime.UtcNow}"));
                Debug.WriteLine($"Disconnection completed\n{DateTime.UtcNow}");
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Disconnection Failed: " + ex.Message);
                DisconnectionFailed?.Invoke(this, new ConnectionEventArgs("Disconnection Failed: " + ex.Message));
            }
        }
Beispiel #2
0
 /// <summary>
 /// Raises an event if the link is disconnected.
 /// </summary>
 /// <param name="e">The link connection.</param>
 protected virtual void OnDisconnectingLink(LinkEventArgs e)
 {
     lock (_OnEventLink_ThreadLock)
     {
         Disconnecting?.Invoke(this, e);
     }
 }
Beispiel #3
0
 private void ChannelDisconnecting(IChannel channel, ShutdownReason shutdownReason)
 {
     _letterDispatcher.DequeueChannel(channel);
     Disconnecting?.Invoke(this, new DisconnectingEventArgs {
         Binding = channel.Binding, Reason = shutdownReason, RemoteNodeId = channel.RemoteNodeId, Socket = this
     });
 }
Beispiel #4
0
        public override void OnConnectionStateChange(BluetoothGatt gatt, GattStatus status, ProfileState newState)
        {
            base.OnConnectionStateChange(gatt, status, newState);

            switch (newState)
            {
            case ProfileState.Connecting:
                Connecting?.Invoke(this, EventArgs.Empty);

                break;

            case ProfileState.Connected:
                Connected?.Invoke(this, EventArgs.Empty);

                break;

            case ProfileState.Disconnecting:
                Disconnecting?.Invoke(this, EventArgs.Empty);

                break;

            case ProfileState.Disconnected:
                Disconnected?.Invoke(this, EventArgs.Empty);

                break;
            }
        }
Beispiel #5
0
 public static void Disconnect(String reason)
 {
     lock (Disposables)
     {
         InteractionService.RemoteGameObjects.ClearValue();
         Disconnecting?.Invoke(reason);
         Disposables.Dispose();
     }
 }
Beispiel #6
0
 protected virtual void Disconnect(bool isNormal)
 {
     if (IsConnected)
     {
         Disconnecting?.Invoke();
     }
     DisconnectInternal(isNormal);
     if (IsConnected)
     {
         IsConnected = false;
         Disconnected?.Invoke();
     }
 }
Beispiel #7
0
        private static unsafe int OnMessage(UOMessage msg, int arg1, int arg2, int arg3, byte *data)
        {
            try
            {
                switch (msg)
                {
                case UOMessage.Ready:
                    Ready = true;
                    hooks.Send(UOMessage.ConnectionInfo, (int)ServerIP, ServerPort);
                    hooks.Send(UOMessage.GameSize, Width, Height);
                    OnInit();
                    break;

                case UOMessage.Connected:
                    Connected.Raise();
                    break;

                case UOMessage.Disconnecting:
                    Disconnecting.Raise();
                    break;

                case UOMessage.Closing:
                    Closing.Raise();
                    break;

                case UOMessage.Focus:
                    FocusChanged.Raise(arg1 != 0);
                    break;

                case UOMessage.Visibility:
                    VisibilityChanged.Raise(arg1 != 0);
                    break;

                case UOMessage.KeyDown:
                    UOKeyEventArgs keyArgs = new UOKeyEventArgs(arg1, arg2);
                    KeyDown.Raise(keyArgs);
                    if (keyArgs.Filter)
                    {
                        return(1);
                    }
                    break;

                case UOMessage.PacketToClient:
                    Packet toClient = new Packet(data, arg1);
                    PacketToClient.Raise(toClient);
                    if (toClient.Filter)
                    {
                        return(1);
                    }
                    if (toClient.Changed)
                    {
                        return(2);
                    }
                    break;

                case UOMessage.PacketToServer:
                    Packet toServer = new Packet(data, arg1);
                    PacketToServer.Raise(toServer);
                    if (toServer.Filter)
                    {
                        return(1);
                    }
                    if (toServer.Changed)
                    {
                        return(2);
                    }
                    break;
                }
            }
            catch (Exception ex) { OnException(ex); }
            return(0);
        }
Beispiel #8
0
 /// <inheritdoc cref="OnDisconnecting"/>
 public void OnDisconnecting(object sender)
 {
     Disconnecting?.Invoke(sender, EventArgs.Empty);
 }
    private void ReadP2PPacket(byte[] array, uint num, uint num2, CSteamID csteamID)
    {
        MemoryStream serializationStream = new MemoryStream(array);
        Packet       packet = new BinaryFormatter().Deserialize(serializationStream) as Packet;

        if (packet.packetType == PacketType.Single)
        {
            PacketSingle packetS = packet as PacketSingle;
            switch (packetS.message.type)
            {
            case MessageType.None:
                break;

            case MessageType.LobbyInfoRequest:
                SendP2P(csteamID,
                        new Message_LobbyInfoRequest_Result(SteamFriends.GetPersonaName(),
                                                            PilotSaveManager.currentVehicle.vehicleName,
                                                            PilotSaveManager.currentScenario.scenarioName,
                                                            PilotSaveManager.currentCampaign.campaignName,
                                                            PlayerManager.players.Count.ToString()),
                        EP2PSend.k_EP2PSendReliable);
                break;

            case MessageType.LobbyInfoRequest_Result:
                Message_LobbyInfoRequest_Result result = packetS.message as Message_LobbyInfoRequest_Result;
                Multiplayer._instance.lobbyInfoText.text = result.username + "'s Game\n" + result.vehicle + "\n" + result.campaign + " " + result.scenario + "\n" + (result.playercount == "1" ? result.playercount + " Player" : result.playercount + " Players");
                break;

            case MessageType.JoinRequest:
                if (!isHost)
                {
                    Debug.LogError($"Recived Join Request when we are not the host");
                    return;
                }
                Message_JoinRequest joinRequest = packetS.message as Message_JoinRequest;
                if (players.Contains(csteamID))
                {
                    Debug.LogError("The player seemed to send two join requests");
                    return;
                }
                if (joinRequest.currentVehicle == PilotSaveManager.currentVehicle.vehicleName &&
                    joinRequest.currentScenario == PilotSaveManager.currentScenario.scenarioID &&
                    joinRequest.currentCampaign == PilotSaveManager.currentCampaign.campaignID)
                {
                    Debug.Log($"Accepting {csteamID.m_SteamID}");
                    players.Add(csteamID);
                    readyDic.Add(csteamID, false);
                    UpdateLoadingText();
                    SendP2P(csteamID, new Message_JoinRequest_Result(true), EP2PSend.k_EP2PSendReliable);
                }
                else
                {
                    string reason = "Failed to Join Player";
                    if (joinRequest.currentVehicle != PilotSaveManager.currentVehicle.vehicleName)
                    {
                        reason += "\nWrong Vehicle.";
                    }
                    if (joinRequest.currentScenario != PilotSaveManager.currentScenario.scenarioID)
                    {
                        reason += "\nWrong Scenario.";
                    }
                    if (joinRequest.currentCampaign != PilotSaveManager.currentCampaign.campaignID)
                    {
                        reason += "\nWrong Campaign.";
                    }
                    SendP2P(csteamID, new Message_JoinRequest_Result(false, reason), EP2PSend.k_EP2PSendReliable);
                    Debug.Log($"Denied {csteamID}, reason\n{reason}");
                }
                break;

            case MessageType.JoinRequest_Result:
                Message_JoinRequest_Result joinResult = packetS.message as Message_JoinRequest_Result;
                if (joinResult.canJoin)
                {
                    Debug.Log($"Joining {csteamID.m_SteamID}");
                    hostID = csteamID;
                    StartCoroutine(FlyButton());
                }
                else
                {
                    Debug.LogWarning($"We can't join {csteamID.m_SteamID} reason = \n{joinResult.reason}");
                }
                break;

            case MessageType.Ready:
                //The client has said they are ready to start, so we change it in the dictionary
                if (readyDic.ContainsKey(csteamID))
                {
                    Debug.Log($"{csteamID.m_SteamID} has said they are ready!\nHost ready state {hostReady}");
                    readyDic[csteamID] = true;
                    if (alreadyInGame)
                    {
                        //Someone is trying to join when we are already in game.
                        Debug.Log($"We are already in session, {csteamID} is joining in!");
                        SendP2P(csteamID, new Message(MessageType.Ready_Result), EP2PSend.k_EP2PSendReliable);
                        break;
                    }
                    else if (hostReady && EveryoneElseReady())
                    {
                        Debug.Log("The last client has said they are ready, starting");
                        SendGlobalP2P(new Message(MessageType.Ready_Result), EP2PSend.k_EP2PSendReliable);
                        LoadingSceneController.instance.PlayerReady();
                    }
                    UpdateLoadingText();
                }
                break;

            case MessageType.Ready_Result:
                Debug.Log("The host said everyone is ready, launching the mission");
                hostReady = true;
                LoadingSceneController.instance.PlayerReady();
                break;

            case MessageType.RequestSpawn:
                if (RequestSpawn != null)
                {
                    RequestSpawn.Invoke(packet, csteamID);
                }
                break;

            case MessageType.RequestSpawn_Result:
                if (RequestSpawn_Result != null)
                {
                    RequestSpawn_Result.Invoke(packet);
                }
                break;

            case MessageType.SpawnVehicle:
                if (SpawnVehicle != null)
                {
                    SpawnVehicle.Invoke(packet);
                }
                break;

            case MessageType.RigidbodyUpdate:
                if (RigidbodyUpdate != null)
                {
                    RigidbodyUpdate.Invoke(packet);
                }
                break;

            case MessageType.PlaneUpdate:
                if (PlaneUpdate != null)
                {
                    PlaneUpdate.Invoke(packet);
                }
                break;

            case MessageType.EngineTiltUpdate:
                if (EngineTiltUpdate != null)
                {
                    EngineTiltUpdate.Invoke(packet);
                }
                break;

            case MessageType.Disconnecting:

                if (isHost)
                {
                    if (Multiplayer.SoloTesting)
                    {
                        break;
                    }
                    players.Remove(csteamID);
                    SendGlobalP2P(packet);
                }
                else
                {
                    Message_Disconnecting messsage = ((PacketSingle)packet).message as Message_Disconnecting;
                    if (messsage.isHost)
                    {
                        //If it is the host quiting we just need to quit the mission as all networking will be lost.
                        FlightSceneManager flightSceneManager = FindObjectOfType <FlightSceneManager>();
                        if (flightSceneManager == null)
                        {
                            Debug.LogError("FlightSceneManager was null when host quit");
                        }
                        flightSceneManager.ExitScene();
                    }
                    break;
                }
                if (Disconnecting != null)
                {
                    Disconnecting.Invoke(packet);
                }
                break;

            case MessageType.WeaponsSet:
                if (WeaponSet != null)
                {
                    WeaponSet.Invoke(packet);
                }
                break;

            case MessageType.WeaponsSet_Result:
                if (WeaponSet_Result != null)
                {
                    WeaponSet_Result.Invoke(packet);
                }
                if (isHost)
                {
                    SendGlobalP2P(packet);
                }
                break;

            case MessageType.WeaponFiring:
                if (WeaponFiring != null)
                {
                    WeaponFiring.Invoke(packet);
                }
                break;

            case MessageType.WeaponStoppedFiring:
                if (WeaponStoppedFiring != null)
                {
                    WeaponStoppedFiring.Invoke(packet);
                }
                break;

            case MessageType.MissileUpdate:
                if (MissileUpdate != null)
                {
                    MissileUpdate.Invoke(packet);
                }
                break;

            case MessageType.RequestNetworkUID:
                if (RequestNetworkUID != null)
                {
                    RequestNetworkUID.Invoke(packet);
                }
                break;

            case MessageType.LoadingTextUpdate:
                if (!isHost)
                {
                    UpdateLoadingText(packet);
                }
                break;

            default:
                break;
            }
        }
    }
Beispiel #10
0
        static void OnDeviceDisconnecting(object sender, EventArgs e)
        {
            Disconnecting?.Invoke(null, EventArgs.Empty);

            Console.WriteLine("### Device disconnecting");
        }
 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Disconnecting obj)
 {
     return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr);
 }
Beispiel #12
0
        protected virtual void OnDisconnecting(object sender, EventArgs args)
        {
            Console.WriteLine("\nTerminal {0}: disconnected.\n", this.Number);

            Disconnecting?.Invoke(sender, args);
        }
Beispiel #13
0
 static Disconnecting()
 {
     Instance = new Disconnecting();
 }