private async void StopServer()
 {
     ServerStatusChanged?.Invoke(this, false);
     await Dispatcher.InvokeAsync(() =>
     {
         ServerButton.Content = "Start Server";
     });
 }
        partial void ImplDispatchRead()
        {
            if (DispatchClient == null)
            {
                return;
            }

            var messages = m_messages;

            _lastDispatchSize = DispatchClient.ReadMessages(messages);
            // ReSharper disable once ForCanBeConvertedToForeach
            for (int i = 0; i < messages.Count; i++)
            {
                var msgType = messages[i].MessageType;
                var msg     = NetMessage.GetMessage(messages[i].Data.Length);
                messages[i].Clone(msg);
                msg.Sender = messages[i].SenderConnection;
                DispatchClient.Recycle(messages[i]);

                if (msgType == NetIncomingMessageType.Data)
                {
                    if (Server != null)
                    {
                        Server.ConsumeData(msg);
                    }
                    else
                    {
                        Debug.LogWarning("Received server data when not connected");
                    }
                }
                else if (msgType == NetIncomingMessageType.DebugMessage)
                {
                    Debug.Log(msg.ReadString());
                }
                else if (msgType == NetIncomingMessageType.WarningMessage)
                {
                    var str = msg.ReadString();
                    if (!str.StartsWith("Received unhandled library message Acknowledge"))
                    {
                        Debug.LogWarning(str);
                    }
                }
                else if (msgType == NetIncomingMessageType.StatusChanged)
                {
                    var status       = (NetConnectionStatus)msg.ReadByte();
                    var statusReason = msg.ReadString();
                    if (status == NetConnectionStatus.Connected)
                    {
                        var serverConn = DispatchClient.ServerConnection;
                        if (serverConn == null)
                        {
                            throw new NullReferenceException("Could not get server connection after connected");
                        }
                        var remsg = serverConn.RemoteHailMessage;
                        if (remsg == null)
                        {
                            throw new NullReferenceException("Could not get room guid");
                        }
                        byte[] gid;
                        if (!remsg.ReadBytes(16, out gid))
                        {
                            throw new Exception("Could not read room guid");
                        }
                        RoomId = new Guid(gid);
                        Debug.Log($"Connected to dispatcher. Id is {RoomId}");
                        Server = new Server(this)
                        {
                            Connection = serverConn
                        };
                    }
                    else if (status == NetConnectionStatus.Disconnected)
                    {
                        Server = null;
                        RoomId = Guid.Empty;
                        Debug.Log("Disconnected from dispatcher");
                    }
                    else
                    {
                        Debug.Log($"DConn ServerStatus: {status}, {statusReason}");
                    }
                    ServerStatus = status.ToPNet();
                    ServerStatusChanged?.Invoke();
                }
                else if (msgType == NetIncomingMessageType.Error)
                {
                    Debug.LogException(new Exception(msg.ReadString())
                    {
                        Source = "Room.Lidgren.ImplementationQueueRead [Lidgren DispatchClient Error]"
                    });                                                                                                                                     //this should really never happen...
                }
                else
                {
                    Debug.LogWarning($"Unknown message type {msgType} from server");
                }

                NetMessage.RecycleMessage(msg);
            }
            messages.Clear();
        }
 private void StartServer()
 {
     ServerStatusChanged?.Invoke(this, true);
     ServerButton.Content = "Stop Server";
 }
Beispiel #4
0
 private void OnServerStatusChanged(ServerStatusEventArgs eArgs)
 {
     ServerStatusChanged?.Invoke(this, eArgs);
 }