public static void TryConnect(IPAddress address, int port) { EventBasedNetListener listener = new EventBasedNetListener(); Multiplayer.session = new MultiplayerSession(); NetManager netClient = new NetManager(listener); netClient.Start(); netClient.ReconnectDelay = 300; netClient.MaxConnectAttempts = 8; listener.PeerConnectedEvent += peer => { IConnection conn = new MpNetConnection(peer); conn.username = Multiplayer.username; conn.State = ConnectionStateEnum.ClientJoining; Multiplayer.session.client = conn; MpLog.Log("Net client connected"); }; listener.PeerDisconnectedEvent += (peer, info) => { string reason; if (info.AdditionalData.AvailableBytes > 0) { reason = info.AdditionalData.GetString(); } else { reason = DisconnectReasonString(info.Reason); if (info.SocketErrorCode != SocketError.Success) { reason += ": " + info.SocketErrorCode; } } Multiplayer.session.disconnectNetReason = reason; ConnectionStatusListeners.TryNotifyAll_Disconnected(); OnMainThread.StopMultiplayer(); MpLog.Log("Net client disconnected"); }; listener.NetworkReceiveEvent += (peer, reader, method) => { byte[] data = reader.GetRemainingBytes(); Multiplayer.HandleReceive(new ByteReader(data), method == DeliveryMethod.ReliableOrdered); }; listener.NetworkErrorEvent += (endpoint, error) => { Log.Warning($"Net client error {error}"); }; Multiplayer.session.netClient = netClient; netClient.Connect(address.ToString(), port, ""); }
public void OnPeerDisconnected(NetPeer peer, DisconnectInfo info) { var reader = new ByteReader(info.AdditionalData.GetRemainingBytes()); Multiplayer.session.HandleDisconnectReason((MpDisconnectReason)reader.ReadByte(), reader.ReadPrefixedBytes()); ConnectionStatusListeners.TryNotifyAll_Disconnected(); OnMainThread.StopMultiplayer(); MpLog.Log("Net client disconnected"); }
public static void HandleReceive(ByteReader data, bool reliable) { try { Multiplayer.Client.HandleReceive(data, reliable); } catch (Exception e) { Log.Error($"Exception handling packet by {Multiplayer.Client}: {e}"); Multiplayer.session.disconnectInfo.titleTranslated = "MpPacketErrorLocal".Translate(); ConnectionStatusListeners.TryNotifyAll_Disconnected(); Multiplayer.StopMultiplayer(); } }