public void NewClientAppear(Message message, Socket ConectedSocket) { if (message is ClientIDMessage) { ClientIDMessage RegMessage = (ClientIDMessage)message; DownloadClient client; client = new DownloadClient(RegMessage.Id, ConectedSocket, serializer); client.messageManager += UploadMessageManager; clients.Add(client); } }
private void IDManager(Message message) { Action action = delegate { ClientIDMessage mes = (ClientIDMessage)message; ClientID.Visible = true; label3.Visible = true; ClientID.Enabled = false; ClientID.Text = mes.Id.ToString(); }; if (InvokeRequired) { Invoke(action); } else { action(); } }
public void ClientIDMessageManager(ClientIDMessage message) { ClientID = message.id; }
public void EstablishConnection(uint userId, byte[] sessionKey, IPAddress address, int port) { ConnectedAddress = address; ConnectedPort = port; Session = new Session(); _Socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); _SocketReader = new SocketReader(Session, _Socket); _SocketWriter = new SocketWriter(Session, _Socket); Session.Command = SessionCommand.Connect; _logger.Debug("Connecting to zone server at {0}:{1}", address, port); _Socket.Connect(address, port); _SocketReader.Start().WaitOne(ConnectTimeout); _SocketWriter.Start().WaitOne(ConnectTimeout); var timeout = DateTime.Now.Add(ConnectTimeout); while (Session.Status != SessionStatus.Connected && Session.Status != SessionStatus.Error) { if (timeout <= DateTime.Now) { _logger.Error("Timeout waiting for connecting to establish"); throw new TimeoutException("Timeout waiting for server conenction"); } Thread.Sleep(TimeSpan.FromMilliseconds(ConnectTimeout.TotalMilliseconds / 10)); } if (!Start().WaitOne(ConnectTimeout)) { _logger.Error("ObjectGraph service failed to start in time"); throw new TimeoutException("Timeout waiting for server conenction"); } var clientIDMsg = new ClientIDMessage(userId, sessionKey); clientIDMsg.AddFieldsToData(); Session.SendChannelA(clientIDMsg); var messages = Messages.WaitForMessages(Convert.ToInt32(ConnectTimeout.TotalMilliseconds), MessageOp.ErrorMessage, MessageOp.ClientPermissionsMessage); if (messages == null) { _logger.Error("Timeout waiting for ClientPermissionsMessage"); throw new TimeoutException("Timeout waiting for server connection"); } var errorMsg = Message.Create <ErrorMessage>( messages.FirstOrDefault(cur => cur.MessageOpCodeEnum == MessageOp.ErrorMessage)); if (errorMsg != null) { _logger.Error("Error getting client permission: [{0}] {1}", errorMsg.ErrorType, errorMsg.Message); throw new Exception(string.Format("[{0}] {1}", errorMsg.ErrorType, errorMsg.Message)); } var permissionMessage = Message.Create <ClientPermissionsMessage>( messages.FirstOrDefault(cur => cur.MessageOpCodeEnum == MessageOp.ClientPermissionsMessage)); if (permissionMessage == null) { _logger.Error("Unknow packet when expecting ClientPermissionsMessage"); throw new Exception("Unknown error connecting to server"); } SelectedGalaxyOpen = permissionMessage.GalaxyOpenFlag == 1; CanCreateCharacterOnGalaxy = permissionMessage.CharacterSlotOpenFlag == 1; }