public static MyMultiplayerHostResult HostLobby(LobbyTypeEnum lobbyType, int maxPlayers, MySyncLayer syncLayer)
        {
            System.Diagnostics.Debug.Assert(syncLayer != null);
            MyTrace.Send(TraceWindow.Multiplayer, "Host game");

            MyMultiplayerHostResult ret = new MyMultiplayerHostResult();

#if !XB1
            SteamSDK.Lobby.Create(lobbyType, maxPlayers, (lobby, result) =>
            {
                if (!ret.Cancelled)
                {
                    if (result == Result.OK && lobby.GetOwner() != Sync.MyId)
                    {
                        result = Result.Fail;
                        lobby.Leave();
                    }

                    MyTrace.Send(TraceWindow.Multiplayer, "Lobby created");
                    lobby.SetLobbyType(lobbyType);
                    ret.RaiseDone(result, result == Result.OK ? MyMultiplayer.Static = new MyMultiplayerLobby(lobby, syncLayer) : null);
                }
            });
#endif
            return(ret);
        }
        public static MyMultiplayerJoinResult JoinLobby(ulong lobbyId)
        {
            MyTrace.Send(TraceWindow.Multiplayer, "Join game");
            MyMultiplayerJoinResult ret = new MyMultiplayerJoinResult();

#if !XB1
            Lobby.Join(lobbyId, (info, result) =>
            {
                if (!ret.Cancelled)
                {
                    if (result == Result.OK && info.EnterState == LobbyEnterResponseEnum.Success && info.Lobby.GetOwner() == Sync.MyId)
                    {
                        // Joining lobby as server is dead-end, nobody has world. It's considered doesn't exists
                        info.EnterState = LobbyEnterResponseEnum.DoesntExist;
                        info.Lobby.Leave();
                    }

                    MyTrace.Send(TraceWindow.Multiplayer, "Lobby joined");
                    bool success = result == Result.OK && info.EnterState == LobbyEnterResponseEnum.Success;
                    ret.RaiseJoined(result, info, success ? MyMultiplayer.Static = new MyMultiplayerLobbyClient(info.Lobby, new MySyncLayer(new MyTransportLayer(MyMultiplayer.GameEventChannel))) : null);
                }
            });
#endif

            return(ret);
        }
Beispiel #3
0
        public static MyMultiplayerHostResult HostLobby(MyLobbyType lobbyType, int maxPlayers, MySyncLayer syncLayer)
        {
            MyMultiplayerHostResult ret = new MyMultiplayerHostResult();

            MyGameService.CreateLobby(lobbyType, (uint)maxPlayers, delegate(IMyLobby lobby, bool succes, string msg) {
                if (!ret.Cancelled)
                {
                    if (succes && (lobby.OwnerId != Sync.MyId))
                    {
                        succes = false;
                        lobby.Leave();
                    }
                    lobby.LobbyType = lobbyType;
                    MyMultiplayerBase multiplayer = null;
                    if (succes)
                    {
                        MyMultiplayerLobby lobby1 = new MyMultiplayerLobby(lobby, syncLayer);
                        Static      = lobby1;
                        multiplayer = lobby1;
                        multiplayer.ExperimentalMode = true;
                    }
                    ret.RaiseDone(succes, msg, multiplayer);
                }
            });
            return(ret);
        }
Beispiel #4
0
 public MyDownloadWorldResult(int channel, ulong sender, MyMultiplayerBase mp)
 {
     m_mp      = mp;
     m_sender  = sender;
     m_channel = channel;
     MyNetworkReader.SetHandler(m_channel, MyDownloadWorldResult_Received);
     SteamSDK.Peer2Peer.ConnectionFailed += Peer2Peer_ConnectionFailed;
 }
Beispiel #5
0
 public MyDownloadProfilerResult(int channel, ulong sender, MyMultiplayerBase mp)
 {
     m_mp         = mp;
     m_sender     = sender;
     m_channel    = channel;
     m_receiveMsg = new MyMultipartMessage(channel);
     MyNetworkReader.SetHandler(m_channel, MyDownloadProfilerResult_Received, mp.DisconnectClient);
 }
Beispiel #6
0
 public MyMultiplayerBattleData(MyMultiplayerBase multiplayer)
 {
     m_multiplayer = multiplayer;
     if (Sync.IsServer == false)
     {
         multiplayer.SyncLayer.TransportLayer.Register(MyMessageId.WORLD_BATTLE_DATA, OnValueChanged);
     }
 }
Beispiel #7
0
 public MyDownloadWorldResult(int channel, ulong sender, MyMultiplayerBase mp)
 {
     m_mp         = mp;
     m_sender     = sender;
     m_channel    = channel;
     m_receiveMsg = new MyMultipartMessage(channel);
     MyNetworkReader.SetHandler(m_channel, MyDownloadWorldResult_Received, mp.DisconnectClient);
     SteamSDK.Peer2Peer.ConnectionFailed += Peer2Peer_ConnectionFailed;
 }
        public void RaiseDone(Result result, MyMultiplayerBase multiplayer)
        {
            Debug.Assert(!Cancelled, "Action is canceled, it should not raise event");
            var handler = Done;

            if (handler != null)
            {
                handler(result, multiplayer);
            }
        }
        public void RaiseJoined(Result result, LobbyEnterInfo info, MyMultiplayerBase multiplayer)
        {
            Debug.Assert(!Cancelled, "Cancelled action should not raise events");
            var handler = JoinDone;

            if (handler != null)
            {
                handler(result, info, multiplayer);
            }
        }
Beispiel #10
0
        public void RaiseDone(bool success, string msg, MyMultiplayerBase multiplayer)
        {
            Action <bool, string, MyMultiplayerBase> done = this.Done;

            if (done != null)
            {
                done(success, msg, multiplayer);
            }
            this.m_done = true;
        }
 public MyMultiplayerBattleData(MyMultiplayerBase multiplayer)
 {
     m_multiplayer = multiplayer;
     m_multiplayer.RegisterControlMessage <KeyValueDataMsg>(MyControlMessageEnum.BattleKeyValue, OnKeyValueChanged);
 }
Beispiel #12
0
 public MyMultiplayerBattleData(MyMultiplayerBase multiplayer)
 {
     m_multiplayer = multiplayer;
     m_multiplayer.RegisterControlMessage <KeyValueDataMsg>(MyControlMessageEnum.BattleKeyValue, OnKeyValueChanged, MyMessagePermissions.FromServer);
 }
Beispiel #13
0
        public void RaiseJoined(bool success, IMyLobby lobby, MyLobbyEnterResponseEnum response, MyMultiplayerBase multiplayer)
        {
            Action <bool, IMyLobby, MyLobbyEnterResponseEnum, MyMultiplayerBase> joinDone = this.JoinDone;

            if (joinDone != null)
            {
                joinDone(success, lobby, response, multiplayer);
            }
        }