public LotConnectionRegulator([Named("City")] AriesClient cityClient, [Named("Lot")] AriesClient lotClient, IClientDataService dataService) { this.City = cityClient; this.City.AddSubscriber(this); this.Client = lotClient; this.Client.AddSubscriber(this); this.DataService = dataService; City.AddSubscriber(this); AddState("Disconnected") .Transition() .OnData(typeof(JoinLotRequest)).TransitionTo("SelectLot") .Default(); AddState("SelectLot").OnlyTransitionFrom("Disconnected"); AddState("FindLot").OnlyTransitionFrom("SelectLot").OnData(typeof(FindLotResponse)).TransitionTo("FoundLot"); AddState("FoundLot").OnlyTransitionFrom("FindLot"); AddState("OpenSocket") .OnData(typeof(AriesConnected)).TransitionTo("SocketOpen") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnlyTransitionFrom("FoundLot"); AddState("SocketOpen") .OnData(typeof(RequestClientSession)).TransitionTo("RequestClientSession") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnlyTransitionFrom("OpenSocket"); AddState("RequestClientSession") .OnData(typeof(HostOnlinePDU)).TransitionTo("HostOnline") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnlyTransitionFrom("SocketOpen"); AddState("HostOnline").OnlyTransitionFrom("RequestClientSession"); AddState("PartiallyConnected") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnData(typeof(FSOVMTickBroadcast)).TransitionTo("LotCommandStream") .OnData(typeof(FSOVMDirectToClient)).TransitionTo("LotCommandStream") .OnlyTransitionFrom("HostOnline"); AddState("LotCommandStream") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnData(typeof(FSOVMTickBroadcast)).TransitionTo("LotCommandStream") .OnData(typeof(FSOVMDirectToClient)).TransitionTo("LotCommandStream"); AddState("UnexpectedDisconnect"); AddState("Disconnect") .OnData(typeof(AriesDisconnected)) .TransitionTo("Disconnected"); }
public void SessionClosed(AriesClient client) { LOG.Info("Lot Server " + LotServerConfig.Call_Sign + " disconnected!"); Connected = false; _Connecting = false; if (OnDisconnected != null) { OnDisconnected(this); } }
public void MessageReceived(AriesClient client, object message) { if (message is InstantMessage instantMsg) { if (instantMsg.Type == InstantMessageType.MESSAGE || instantMsg.Type == InstantMessageType.FAILURE_ACK) { GameThread.NextUpdate((_) => { HandleInstantMessage((InstantMessage)message); }); } } }
public void MessageReceived(AriesClient client, object message) { if (message is IGluonCall) { var call = (IGluonCall)message; if (Callbacks.ContainsKey(call.CallId)) { Callbacks[call.CallId].SetResult(call); return; } } Router.Handle(this, message); }
public ClientDataService(IModelSerializer serializer, FSO.Content.Content content, IKernel kernel) : base(serializer, content) { AddProvider(kernel.Get <ClientAvatarProvider>()); AddProvider(kernel.Get <ClientLotProvider>()); AddProvider(kernel.Get <ClientCityProvider>()); CityClient = kernel.Get <AriesClient>("City"); CityClient.AddSubscriber(this); //When a new object is made, this data will be requested automatically SetDefaultDataStruct(typeof(Avatar), MaskedStruct.SimPage_Main); PollInterval = GameThread.SetInterval(PollTopics, 5000); }
public void MessageReceived(AriesClient client, object message) { if (message is RequestClientSession || message is HostOnlinePDU) { this.AsyncProcessMessage(message); } else if (message is AnnouncementMsgPDU) { GameThread.InUpdate(() => { UIScreen.GlobalShowAnnouncement((AnnouncementMsgPDU)message); }); } else if (message is ChangeRoommateResponse) { } }
public void MessageReceived(AriesClient client, object message) { if (client == City) { if (message is FindLotResponse) { AsyncProcessMessage(message); } } else if (client == Client) { if (message is RequestClientSession || message is HostOnlinePDU || message is FSOVMTickBroadcast || message is FSOVMDirectToClient || message is ServerByePDU) { if (message is ServerByePDU) { } //force in order this.SyncProcessMessage(message); } if (message is FSOVMProtocolMessage) { var msg = (FSOVMProtocolMessage)message; GameThread.InUpdate(() => { if (msg.UseCst) { if (msg.Title != "") { msg.Title = GameFacade.Strings.GetString("223", msg.Title); } msg.Message = GameFacade.Strings.GetString("223", msg.Message); } UIAlert.Alert(msg.Title, msg.Message, true); }); } } }
public void MessageReceived(AriesClient client, object message) { if (client == City) { if (message is FindLotResponse) { AsyncProcessMessage(message); } } else { if (message is RequestClientSession || message is HostOnlinePDU || message is FSOVMTickBroadcast || message is FSOVMDirectToClient) { //force in order this.SyncProcessMessage(message); } } }
public CreateASimRegulator([Named("City")] AriesClient cityClient) { this.City = cityClient; this.City.AddSubscriber(this); AddState("Idle") .Default() .Transition() .OnData(typeof(RSGZWrapperPDU)) .TransitionTo("CreateSim"); AddState("CreateSim").OnlyTransitionFrom("Idle"); AddState("Waiting") .OnlyTransitionFrom("CreateSim") .OnData(typeof(CreateASimResponse)) .TransitionTo("ProcessResponse"); AddState("ProcessResponse").OnlyTransitionFrom("Waiting"); AddState("Error").OnlyTransitionFrom("ProcessResponse"); AddState("Success").OnlyTransitionFrom("ProcessResponse"); }
public void SessionIdle(AriesClient client) { }
public void SessionOpened(AriesClient client) { }
public void SessionClosed(AriesClient client) { Status = GluonHostStatus.DISCONNECTED; }
public void MessageReceived(AriesClient client, object message) { if (message is MailResponse) { var msg = (MailResponse)message; GameThread.NextUpdate(x => { switch (msg.Type) { case MailResponseType.NEW_MAIL: case MailResponseType.POLL_RESPONSE: case MailResponseType.SEND_SUCCESS: //cool. we got mail, or got the mail we sent back. if (msg.Messages.Length == 0) { return; //didnt actually get anything } foreach (var mail in msg.Messages) { InboxStore.Save(mail); } View.UpdateInbox(); if (msg.Type == MailResponseType.POLL_RESPONSE) { //show a message indicating we recieved new mail while we were offline. UIAlert alert = null; alert = UIScreen.GlobalShowAlert(new UI.Controls.UIAlertOptions { Title = GameFacade.Strings.GetString("225", "1"), Message = GameFacade.Strings.GetString("225", msg.Messages.Length > 1 ? "3" : "2", new string[] { msg.Messages.Length.ToString() }), Buttons = new UI.Controls.UIAlertButton[] { new UI.Controls.UIAlertButton(UI.Controls.UIAlertButtonType.Yes, (btn => { //show the inbox ((CoreGameScreen)UIScreen.Current).OpenInbox(); UIScreen.RemoveDialog(alert); })), new UI.Controls.UIAlertButton(UI.Controls.UIAlertButtonType.No, (btn => { UIScreen.RemoveDialog(alert); })) } }, true); } if (msg.Type != MailResponseType.SEND_SUCCESS) { //alert user that mail has been recieved via sound and flashing icon HIT.HITVM.Get().PlaySoundEvent(UISounds.LetterRecieve); ((CoreGameScreen)UIScreen.Current).FlashInbox(true); } else { HIT.HITVM.Get().PlaySoundEvent(UISounds.LetterSend); } break; } }); } }
public void SessionCreated(AriesClient client) { }
public void InputClosed(AriesClient session) { AsyncProcessMessage(new AriesDisconnected()); }
public CityConnectionRegulator(CityClient cityApi, [Named("City")] AriesClient cityClient, IDatabaseService db, IClientDataService ds, IKernel kernel, IShardsDomain shards) { this.CityApi = cityApi; this.Client = cityClient; this.Client.AddSubscriber(this); this.DB = db; this.DataService = ds; this.Shards = shards; AddState("Disconnected") .Default() .Transition() .OnData(typeof(ShardSelectorServletRequest)) .TransitionTo("SelectCity"); AddState("SelectCity") .OnlyTransitionFrom("Disconnected", "Reconnecting"); AddState("ConnectToCitySelector") .OnData(typeof(ShardSelectorServletResponse)) .TransitionTo("CitySelected") .OnlyTransitionFrom("SelectCity"); AddState("CitySelected") .OnData(typeof(ShardSelectorServletResponse)) .TransitionTo("OpenSocket") .OnlyTransitionFrom("ConnectToCitySelector"); AddState("OpenSocket") .OnData(typeof(AriesConnected)).TransitionTo("SocketOpen") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnlyTransitionFrom("CitySelected"); AddState("SocketOpen") .OnData(typeof(RequestClientSession)).TransitionTo("RequestClientSession") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnlyTransitionFrom("OpenSocket"); AddState("RequestClientSession") .OnData(typeof(HostOnlinePDU)).TransitionTo("HostOnline") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnlyTransitionFrom("SocketOpen"); AddState("HostOnline").OnlyTransitionFrom("RequestClientSession"); AddState("PartiallyConnected") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnData(typeof(ShardSelectorServletRequest)).TransitionTo("CompletePartialConnection") .OnlyTransitionFrom("HostOnline"); AddState("CompletePartialConnection").OnlyTransitionFrom("PartiallyConnected"); AddState("AskForAvatarData") .OnData(typeof(LoadAvatarByIDResponse)).TransitionTo("ReceivedAvatarData") .OnlyTransitionFrom("PartiallyConnected", "CompletePartialConnection"); AddState("ReceivedAvatarData").OnlyTransitionFrom("AskForAvatarData"); AddState("AskForCharacterData").OnlyTransitionFrom("ReceivedAvatarData"); AddState("ReceivedCharacterData").OnlyTransitionFrom("AskForCharacterData"); AddState("Connected") .OnData(typeof(AriesDisconnected)).TransitionTo("UnexpectedDisconnect") .OnlyTransitionFrom("ReceivedCharacterData"); AddState("UnexpectedDisconnect"); AddState("Disconnect") .OnData(typeof(AriesDisconnected)) .TransitionTo("Disconnected"); AddState("Reconnect") .OnData(typeof(AriesDisconnected)) .TransitionTo("Reconnecting"); AddState("Reconnecting") .OnData(typeof(ShardSelectorServletRequest)) .TransitionTo("SelectCity") .OnlyTransitionFrom("Reconnect"); GameThread.SetInterval(() => { if (Client.IsConnected) { Client.Write(new Server.Protocol.Electron.Packets.KeepAlive()); } }, 10000); //keep alive every 10 seconds. prevents disconnection by aggressive NAT. }
public void SessionCreated(AriesClient client) { this.AsyncProcessMessage(new AriesConnected()); }
public void SessionClosed(AriesClient client) { AsyncProcessMessage(new AriesDisconnected()); }
public void MessageReceived(AriesClient client, object message) { if (message is ChangeRoommateRequest) { var req = (ChangeRoommateRequest)message; if (req.Type == ChangeRoommateType.INVITE) { DataService.Request(MaskedStruct.SimPage_Main, req.AvatarId).ContinueWith(x => { GameThread.InUpdate(() => { if (((Avatar)x.Result)?.Avatar_Name == null) { return; } var name = ((Avatar)x.Result).Avatar_Name; UIAlert alert = null; alert = new UIAlert(new UIAlertOptions() { Title = GameFacade.Strings.GetString("208", "10"), Message = GameFacade.Strings.GetString("208", "11", new string[] { name }), Buttons = new UIAlertButton[] { new UIAlertButton(UIAlertButtonType.Yes, btn => { Network.CityClient.Write(new ChangeRoommateRequest { Type = ChangeRoommateType.ACCEPT, AvatarId = req.AvatarId, LotLocation = req.LotLocation }); UIScreen.RemoveDialog(alert); }), new UIAlertButton(UIAlertButtonType.No, btn => { Network.CityClient.Write(new ChangeRoommateRequest { Type = ChangeRoommateType.DECLINE, AvatarId = req.AvatarId, LotLocation = req.LotLocation }); UIScreen.RemoveDialog(alert); }) } }); UIScreen.GlobalShowDialog(alert, true); }); }); } } else if (message is ChangeRoommateResponse) { DataService.Request(MaskedStruct.CurrentCity, 0); string title; string msg; var resp = (ChangeRoommateResponse)message; switch (resp.Type) { case ChangeRoommateResponseStatus.ACCEPT_SUCCESS: title = GameFacade.Strings.GetString("208", "50"); msg = GameFacade.Strings.GetString("208", "53"); break; case ChangeRoommateResponseStatus.KICK_SUCCESS: title = GameFacade.Strings.GetString("208", "70"); msg = GameFacade.Strings.GetString("208", "73"); break; case ChangeRoommateResponseStatus.SELFKICK_SUCCESS: title = GameFacade.Strings.GetString("208", "130"); msg = GameFacade.Strings.GetString("208", "133"); if (OnMoveoutResult != null) { OnMoveoutResult(true); OnMoveoutResult = null; return; } break; case ChangeRoommateResponseStatus.DECLINE_SUCCESS: case ChangeRoommateResponseStatus.INVITE_SUCCESS: return; case ChangeRoommateResponseStatus.LOT_MUST_BE_CLOSED: case ChangeRoommateResponseStatus.YOU_ARE_NOT_ROOMMATE: //unable to kickout title = GameFacade.Strings.GetString("208", "80"); msg = GameFacade.Strings.GetString("208", "83"); break; case ChangeRoommateResponseStatus.ROOMIE_ELSEWHERE: case ChangeRoommateResponseStatus.OTHER_INVITE_PENDING: title = GameFacade.Strings.GetString("208", "40"); msg = GameFacade.Strings.GetString("208", "43"); break; case ChangeRoommateResponseStatus.ROOMMATE_LEFT: DataService.Request(MaskedStruct.SimPage_Main, resp.Extra).ContinueWith(x => { GameThread.InUpdate(() => { if (((Avatar)x.Result)?.Avatar_Name == null) { return; } var name = ((Avatar)x.Result).Avatar_Name; UIScreen.GlobalShowDialog(new UIAlert(new UIAlertOptions() { Title = GameFacade.Strings.GetString("208", "100"), Message = GameFacade.Strings.GetString("208", "101", new string[] { name }), }), true); }); }); return; case ChangeRoommateResponseStatus.GOT_KICKED: title = GameFacade.Strings.GetString("208", "90"); msg = GameFacade.Strings.GetString("208", "93"); break; case ChangeRoommateResponseStatus.UNKNOWN: case ChangeRoommateResponseStatus.TOO_MANY_ROOMMATES: case ChangeRoommateResponseStatus.YOU_ARE_NOT_OWNER: case ChangeRoommateResponseStatus.NO_INVITE_PENDING: case ChangeRoommateResponseStatus.LOT_DOESNT_EXIST: default: //invitation failed title = GameFacade.Strings.GetString("208", "40"); msg = GameFacade.Strings.GetString("208", "43"); break; } UIScreen.GlobalShowDialog(new UIAlert(new UIAlertOptions() { Title = title, Message = msg, }), true); if (OnMoveoutResult != null) { OnMoveoutResult(false); OnMoveoutResult = null; } //got kicked out //title = GameFacade.Strings.GetString("208", "94"); //msg = GameFacade.Strings.GetString("208", "93"); } }
public void InputClosed(AriesClient session) { Console.WriteLine("close2"); AsyncProcessMessage(new AriesDisconnected()); }
public void InputClosed(AriesClient session) { }
public void InputClosed(AriesClient session) { LOG.Info("Lot Server " + LotServerConfig.Call_Sign + " disconnected! (input closed)"); }
public void MessageReceived(AriesClient client, object message) { ((AriesPacketRouter)_Router).Handle(this, message); }
public DatabaseService([Named("City")] AriesClient cityClient) { CityClient = cityClient; CityClient.AddSubscriber(this); }
public void SessionClosed(AriesClient client) { Console.WriteLine("close"); AsyncProcessMessage(new AriesDisconnected()); }