package com.planet_ink.coffee_mud.core.intermud;
import com.planet_ink.coffee_mud.core.intermud.packets.*;
import com.planet_ink.coffee_mud.core.intermud.persist.*;
import com.planet_ink.coffee_mud.core.intermud.server.*;
import com.planet_ink.coffee_mud.core.intermud.net.*;
import com.planet_ink.coffee_mud.core.intermud.*;
import com.planet_ink.coffee_mud.core.interfaces.*;
import com.planet_ink.coffee_mud.core.*;
import com.planet_ink.coffee_mud.Abilities.interfaces.*;
import com.planet_ink.coffee_mud.Areas.interfaces.*;
import com.planet_ink.coffee_mud.Behaviors.interfaces.*;
import com.planet_ink.coffee_mud.CharClasses.interfaces.*;
import com.planet_ink.coffee_mud.Commands.interfaces.*;
import com.planet_ink.coffee_mud.Common.interfaces.*;
import com.planet_ink.coffee_mud.Exits.interfaces.*;
import com.planet_ink.coffee_mud.Items.interfaces.*;
import com.planet_ink.coffee_mud.Locales.interfaces.*;
import com.planet_ink.coffee_mud.MOBS.interfaces.*;
import com.planet_ink.coffee_mud.Races.interfaces.*;
import java.util.*;
import java.io.IOException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
/**
* Copyright (c) 1996 George Reese
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
public class IMudPeer implements PersistentPeer
{
Object myobj=null;
boolean isRestoring=false;
String myID="";
/**
* Gets data about this peer from storage and gives it
* back to the object for which this peer exists.
* @exception com.planet_ink.coffee_mud.core.intermud.persist.PersistenceException if an error occurs during restore
*/
public void restore() throws PersistenceException
{
isRestoring=true;
if(myobj instanceof Intermud)
{
try{
ObjectInputStream in=new ObjectInputStream(new ByteArrayInputStream(new CMFile("resources/ppeer."+myID,null,false).raw()));
Object newobj;
newobj=in.readObject();
if(newobj instanceof Integer)
((Intermud)myobj).password=((Integer)newobj).intValue();
newobj=in.readObject();
if(newobj instanceof Hashtable)
((Intermud)myobj).banned=(Hashtable)newobj;
newobj=in.readObject();
if(newobj instanceof ChannelList)
((Intermud)myobj).channels=(ChannelList)newobj;
newobj=in.readObject();
if(newobj instanceof MudList)
((Intermud)myobj).muds=(MudList)newobj;
newobj=in.readObject();
if(newobj instanceof Vector)
((Intermud)myobj).name_servers=(Vector)newobj;
}
catch(Exception e){
//Log.errOut("IMudPeer",e.getMessage());
}
}
isRestoring=false;
}
/**
* Triggers a save of its peer. Implementing classes
* should do whatever it takes to save the object in
* this method.
* @exception com.planet_ink.coffee_mud.core.intermud.persist.PersistenceException if a problem occurs in saving
*/
public void save() throws PersistenceException
{
if(myobj instanceof Intermud)
{
try{
ByteArrayOutputStream bout=new ByteArrayOutputStream();
ObjectOutputStream out=new ObjectOutputStream(bout);
out.writeObject(new Integer(((Intermud)myobj).password));
out.writeObject(((Intermud)myobj).banned);
out.writeObject(((Intermud)myobj).channels);
out.writeObject(((Intermud)myobj).muds);
out.writeObject(((Intermud)myobj).name_servers);
out.flush();
bout.flush();
new CMFile("resources/ppeer."+myID,null,false).saveRaw(bout.toByteArray());
out.close();
bout.close();
}
catch(Exception e){
//Log.errOut("IMudPeer",e.getMessage());
}
}
}
/**
* Assigns a persistent object to this peer for
* persistence operations.
* @param ob the implementation of com.planet_ink.coffee_mud.core.intermud.persist.Persistent that this is a peer for
* @see com.planet_ink.coffee_mud.core.intermud.persist.Persistent
*/
public void setPersistent(Persistent ob)
{
myobj=ob;
myID=ob.getClass().getName().substring(ob.getClass().getName().lastIndexOf('.')+1);
}
/**
* An implementation uses this to tell its Persistent
* that it is in the middle of restoring.
* @return true if a restore operation is in progress
*/
public boolean isRestoring()
{return isRestoring;}
}